不确定标题是否足够清晰。
我有一个字典列表,我想从中创建一个数据帧。为简单起见,列表是:
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
这可能吗?
答案 0 :(得分:3)
借助数据透视表
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
如果您不希望将值作为单独的标题,则将values参数作为字符串传递,即
df.pivot_table(index=['from','time'],columns=['signal_name'],values='value').reset_index()
signal_name from time 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)
来自unstack
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