在pandas数据帧中显示多索引数组groupby的结果

时间:2016-07-15 12:10:30

标签: python pandas dataframe

我的数据框看起来像:

        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

1 个答案:

答案 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