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的主要内容,如果未能解决你的问题,请参考以下文章