我的数据框看起来像:
D Type Value
0 1 A 2
1 1 B 4
2 2 C 1
3 1 A 1
我想按D和Type分组并对值求和。
data=df.groupby(['D','Type']).sum()
print(data)
这给了我这个结果:
D Type Value
1 A 3
B 4
2 C 3
但我想用这种格式:
D A B C
1 3 4 Nan
2 Nan Nan 3
答案 0 :(得分:1)
<强>更新强>
r = df.pivot_table(index=['D'], columns='Type', aggfunc='sum').reset_index()
r.columns = [tup[1] if tup[1] else tup[0] for tup in r.columns]
r.to_csv('c:/temp/out.csv', index=False)
结果:
D,A,B,C
1,3.0,4.0,
2,,,1.0
原始回答:
您可以使用pivot_table()方法:
In [7]: df.pivot_table(index=['D'], columns='Type', aggfunc='sum', fill_value=0)
Out[7]:
Value
Type A B C
D
1 3 4 0
2 0 0 1
或与NaN's:
In [8]: df.pivot_table(index=['D'], columns='Type', aggfunc='sum')
Out[8]:
Value
Type A B C
D
1 3.0 4.0 NaN
2 NaN NaN 1.0
PS我认为您的groupby...
部分中有拼写错误:
In [10]: df.groupby(['D','Type']).sum()
Out[10]:
Value
D Type
1 A 3
B 4
2 C 1
应该有C
- &gt; 1
代替C
- &gt; 3