Python 从字典列表创建数据框架,字典键作为列

Python 从字典列表创建数据框架,字典键作为列,python,list,pandas,dictionary,dataframe,Python,List,Pandas,Dictionary,Dataframe,不确定标题是否足够解释 我有一个字典列表,我想从中创建一个数据帧。为简单起见,列表如下: list=[] DIC1={'value': 69.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part1'} DIC2={'value': 65.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part2'} DIC3={'value': 60.0, 'time': 11, 'from': 'Mexi

不确定标题是否足够解释

我有一个字典列表,我想从中创建一个数据帧。为简单起见,列表如下:

list=[]

DIC1={'value': 69.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part1'}
DIC2={'value': 65.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part2'}
DIC3={'value': 60.0, 'time': 11, 'from': 'Mexico', 'signal_name': 'Part1'}
DIC4={'value': 67.0, 'time': 10, 'from': 'Mexico', 'signal_name': 'Part3'}
DIC5={'value': 69.0, 'time': 11, 'from': 'Mexico', 'signal_name': 'Part2'}
DIC6={'value': 70.0, 'time': 12, 'from': 'Mexico', 'signal_name': 'Part1'}
DIC7={'value': 68.0, 'time': 12, 'from': 'Mexico', 'signal_name': 'Part2'}
DIC8={'value': 71.0, 'time': 11, 'from': 'Mexico', 'signal_name': 'Part3'}
DIC9={'value': 50.0, 'time': 12, 'from': 'Mexico', 'signal_name': 'Part3'}

list=[DIC1,DIC2,DIC3,DIC4,DIC5,DIC6,DIC7,DIC8,DIC9]
#Convert to Dataframe
df=pd.DataFrame(list) 
如果我简单地将字典列表转换为如上面示例中所示的数据帧,则会得到如下数据帧:

    from    signal_name time    value
0   Mexico  Part1       10      69.0
1   Mexico  Part2       10      65.0
2   Mexico  Part1       11      60.0
3   Mexico  Part3       10      67.0
4   Mexico  Part2       11      69.0
5   Mexico  Part1       12      70.0
6   Mexico  Part2       12      68.0
7   Mexico  Part3       11      71.0
8   Mexico  Part3       12      50.0
但我试图得到一个过滤表,我想是一种透视表?比如:

    time    from    part1(value)    part2(value)    part3(value)
0   10      Mexico      69.0            65.0            67.0
1   11      Mexico      60.0            69.0            71.0
2   12      Mexico      70.0            68.0            50.0

这可能吗

来自
取消堆栈的解决方案

df.set_index(['from','signal_name','time']).unstack(-2)
Out[437]: 
            value            
signal_name Part1 Part2 Part3
from   time                  
Mexico 10    69.0  65.0  67.0
       11    60.0  69.0  71.0
       12    70.0  68.0  50.0

取消堆栈中的解决方案

df.set_index(['from','signal_name','time']).unstack(-2)
Out[437]: 
            value            
signal_name Part1 Part2 Part3
from   time                  
Mexico 10    69.0  65.0  67.0
       11    60.0  69.0  71.0
       12    70.0  68.0  50.0

借助透视表

df.pivot_table(index=['from','time'],columns=['signal_name'],values=['value']).reset_index()
输出:

from time value signal_name Part1 Part2 Part3 0 Mexico 10 69.0 65.0 67.0 1 Mexico 11 60.0 69.0 71.0 2 Mexico 12 70.0 68.0 50.0 来自时间第1部分第2部分第3部分的信号名称 0墨西哥1069.065.067.0 1墨西哥1160.069.071.0 2墨西哥12 70.0 68.0 50.0
借助透视表

df.pivot_table(index=['from','time'],columns=['signal_name'],values=['value']).reset_index()
输出:

from time value signal_name Part1 Part2 Part3 0 Mexico 10 69.0 65.0 67.0 1 Mexico 11 60.0 69.0 71.0 2 Mexico 12 70.0 68.0 50.0 来自时间第1部分第2部分第3部分的信号名称 0墨西哥1069.065.067.0 1墨西哥1160.069.071.0 2墨西哥12 70.0 68.0 50.0

我们真的很接近nice@Bharathshetty我会删除我的第二个,所以请保留你的答案:——)@Wen那么什么更有效?取消堆栈还是pivot_表?@MinoruTsuru应该取消堆栈,如果您使用的是大数据集,而不是pivot_table@Wen,我现在尝试使用unstack而不是pivot_table,但遇到了一个问题。取消堆叠解决方案将索引设置为[from,time],而pivot_表的索引只是一个数字,“from”和“time”作为一个单独的列存在,因为我计划根据“time”对df运行do things,有没有同样的方法取消堆叠?(我试着改变拆垛的水平,但我总是得到双指数)我们真的很接近nice@Bharathshetty我会删除我的第二个,所以请保留你的答案:——)@Wen那么什么更有效?取消堆栈还是pivot_表?@MinoruTsuru应该取消堆栈,如果您使用的是大数据集,而不是pivot_table@Wen,我现在尝试使用unstack而不是pivot_table,但遇到了一个问题。取消堆叠解决方案将索引设置为[from,time],而pivot_表的索引只是一个数字,“from”和“time”作为一个单独的列存在,因为我计划根据“time”对df运行do things,有没有同样的方法取消堆叠?(我试着改变了拆垛的级别,但我总是得到两个索引)op的一个简单提示:下次当你@MinoruTsuru问问题“先做谷歌”时,我今天早上只回答了两次相同的问题。@Wen有时他们问的问题不会出现在他们在谷歌寻找的答案中。通常他们在谷歌搜索问题。如果搜索类似的输出,然后用一些nlp在已经提出的问题中显示它们,那将是非常好的。正如你所看到的……Op提到的
pivot_table
:)@Wen谢谢你的提示,事实上我确实花了一些时间寻找我问题的答案。除非我真的找不到答案,否则我通常不会发布问题。在这种情况下,你回答了同样的问题,但是另一个问题的标题与我的完全不同。我想这里最大的问题是,我实际上不知道如何提问,事实上,我提到了pivot表,但并不确定,因为我对pivot表和pandas所做的所有搜索都让我发现了一些与我的问题无关的东西。op的一个简单提示:下次当你@MinoruTsuru问问题时,请点击google首先,我今天早上只回答了两次同样的问题。@Wen有时他们问的问题并没有出现在他们在谷歌寻找的答案中。通常他们在谷歌搜索问题。如果搜索类似的输出,然后用一些nlp在已经提出的问题中显示它们,那将是非常好的。正如你所看到的……Op提到的
pivot_table
:)@Wen谢谢你的提示,事实上我确实花了一些时间寻找我问题的答案。除非我真的找不到答案,否则我通常不会发布问题。在这种情况下,你回答了同样的问题,但是另一个问题的标题与我的完全不同。我想这里最大的问题是,我实际上不知道如何提问,事实上,我提到了pivot表,但并不确定,因为我对pivot表和pandas的所有搜索都让我找到了与我的问题无关的东西。