Pandas 小计类似于 Excel

Posted

技术标签:

【中文标题】Pandas 小计类似于 Excel【英文标题】:Pandas subtotal similar to Excel 【发布时间】:2021-02-24 12:25:12 【问题描述】:

我有以下数据框df

     A   B      C
0    21  Blue   100 
1    33  Yellow 100 
2    17  White  250 
3    A2  Grey   40
4    65  Green  500 
5    33  Red    80 
6    17  Purple -50
7    A2  Orange 600

B 列基本上是与代码本身无关的信息,但仍需要包含在输出中。 我已按 A 列对数据框进行了排序,并解决了 col A 包含 int 和 str 的问题:

df['A'] = df['A'].astype(str)
df_sorted = df.sort_values(by=['A'])

所以现在df_sorted 看起来像这样:

     A   B      C
2    17  White  250
6    17  Purple -50
0    21  Blue   100
1    33  Yellow 100
5    33  Red    80
4    65  Green  500
3    A2  Grey   40
7    A2  Orange 600

我的问题是:我怎样才能通过总结类似于 Excel 的小计功能的 col C 来为 col A 中的每个更改进行小计? 数据框的最终输出应如下所示:

     A        B      C
2    17       White  250
6    17       Purple -50
     Subtotal        200  
0    21       Blue   100
     Subtotal        100
1    33       Yellow 100
5    33       Red    80
     Subtotal        180
4    65       Green  500
     Subtotal        500
3    A2       Grey   40
7    A2       Orange 600
     Subtotal        640

【问题讨论】:

这能回答你的问题吗? How to group together rows if the column value exists in a specified list, using Pandas? 获取小计很容易:df.groupby('A')['C'].sum() 但将其合并到原始 df 中并不容易,这就是您最终想要的吗? @balandongiv 不太不幸,因为我需要为 col A 到 df 的每次更改创建小计 @piterbarg 是的,小计最终应该包含在原始 df 中,或者也可以包含在新的 df 中 【参考方案1】:

你可以concat你原来的df和groupby小计。

df1 =  pd.concat([df,
df.groupby(['A'],as_index=False)['C'].sum()]).sort_values('A')

df1.loc[df1['B'].isnull(), 'A'] = 'Subtotal'

print(df1.fillna(''))

          A       B    C
2        17   White  250
6        17  Purple  -50
0  Subtotal          200
0        21    Blue  100
1  Subtotal          100
1        33  Yellow  100
5        33     Red   80
2  Subtotal          180
4        65   Green  500
3  Subtotal          500
3        A2    Grey   40
7        A2  Orange  600
4  Subtotal          640

【讨论】:

以上是关于Pandas 小计类似于 Excel的主要内容,如果未能解决你的问题,请参考以下文章

具有多索引的 Pandas 数据透视表小计

如何使用 groupby 调整 pandas 中的小计列?

输出中带有“小计”值的Python Pandas Groupby?

Pandas 数据透视表和小计

熊猫:追加行小计的新列

在 pandas muiltiindex 中添加小计/总计行会生成元组作为索引