python - 在 Pandas 数据框中添加聚合/摘要行
问题描述
假设我有一个数据框如下:
df = pd.DataFrame(np.array([[2018,'R1','C1',1],[2018,'R1','C2',2],[2018,'R1','C3',3],[2018,'R1','C4',4],[2018,'R1','C5',5],[2018,'R2','C6',6],[2018,'R2','C7',7],[2018,'R2','C8',8],[2018,'R2','C9',9],[2018,'R2','C10',10]]),columns=['Year', 'Region', 'Country', 'Spend'])
我想为每个可能的group by
( groups
) 添加摘要行,以便输出数据框看起来像这样:
我已经学会了如何根据这个StackOverflow 帖子将摘要/总行添加为一列。但我想将这些总行合并到原始数据帧中,如上面的屏幕截图所示,我想用尽可能少的行来完成这一点(也就是说,避免groupby
像下面那样手动调用不同的组合):
df['ByYearTotalCount'] = df.groupby(['Year'])['Spend'].transform('sum')
df['ByYearByRegionTotalCount'] = df.groupby(['Year','Region'])['Spend'].transform('sum')
谁能帮我想出最好pandas
的方法来完成这个?预先感谢您的帮助!
解决方案
用于groupby
首先获取总计/小计行和concat
结果数据框
df2 = df.groupby(['Year'])['Spend'].sum().reset_index()
df3 = df.groupby(['Year', 'Region'])['Spend'].sum().reset_index()
df = pd.concat([df, df2, df3], sort=False).fillna('All').sort_values(by=['Region', 'Country'])
输出
df2
Year Spend
0 2018 55
df3
Year Region Spend
0 2018 R1 15
1 2018 R2 40
df
Year Region Country Spend
0 2018 All All 55
0 2018 R1 All 15
0 2018 R1 C1 1
1 2018 R1 C2 2
2 2018 R1 C3 3
3 2018 R1 C4 4
4 2018 R1 C5 5
1 2018 R2 All 40
9 2018 R2 C10 10
5 2018 R2 C6 6
6 2018 R2 C7 7
7 2018 R2 C8 8
8 2018 R2 C9 9
推荐阅读
- sql - 在 Oracle 11g 中合并时,我想删除与源不匹配的目标行
- powershell - Powershell工作流程,禁用UAC后在本地安装软件?
- python - 如何在 DataFrame 列中“关闭”匹配对
- python - 已模拟的类中的模拟方法
- c++ - 在 Windows 10 c++ x64 上从内存执行代码?
- node.js - 如何使用 Mongodb 和 NodeJs 根据文件名对每个文档的值求和
- typescript - Using union type with generic
- laravel - htaccess 使用 301 重定向强制 https 但发现它实际上是 302
- sqlite - 使用 GROUP BY 的 SQLite MAX 明显慢于 MIN
- angular - 角度服务和网络工作者