在datafram中显示多索引数组groupby的结果

2024-03-29 09:44:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据框,看起来像:

        D        Type    Value    
0       1        A          2
1       1        B          4
2       2        C          1
3       1        A          1

我想按D分组,然后键入值并求和。你知道吗

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

Tags: 数据dfdata键入value格式typenan
1条回答
网友
1楼 · 发布于 2024-03-29 09:44:01

更新:

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

或与南的:

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>;1而不是C>;3

相关问题 更多 >