如何为Pandas分组统计结果添加Total总计行
问题:为分组统计后的DataFrame添加总计行
我通过以下代码对两个DataFrame按Region分组统计Id列的非空值数量,并将结果合并为包含Here和There列的DataFrame:
import pandas as pd df1 = pd.DataFrame({'Region': ['E', 'E', 'U', 'E'], 'Id': [1,None,None,None], 'Ids': [1,2,3,4]}) df2 = pd.DataFrame({'Region': ['E', 'U', 'U', 'E'], 'Id': [1,2,3,4], 'Ids': [1,2,3,4]}) x = df1.groupby(['Region']).count() y = df2.groupby(['Region']).count() c = pd.concat([x['Id'], y['Id']], axis=1, keys=['Here', 'There'])
当前得到的统计表格如下:
| Region | Here | There |
|---|---|---|
| E | 1 | 2 |
| U | 0 | 2 |
我希望为该表格添加索引为'Total'的行,分别计算Here列和There列的总计值,得到如下目标表格:
| Region | Here | There |
|---|---|---|
| E | 1 | 2 |
| U | 0 | 2 |
| Total | 1 | 4 |
请问如何实现这一需求?
解决方案
这里提供三种简洁的实现方式:
方法1:使用pd.concat合并总计行(推荐)
先计算各列的总和生成单行DataFrame,再与原数据合并:
# 生成总计行,设置索引为'Total' total_row = pd.DataFrame(c.sum()).T total_row.index = ['Total'] # 合并原数据与总计行 result = pd.concat([c, total_row])
方法2:使用loc直接添加行
直接通过索引定位添加总计行:
# 为索引'Total'赋值各列总和 c.loc['Total'] = c.sum()
方法3:使用append(注意:pandas 2.0+已标记为过时)
# 将列总和以Series形式追加到原DataFrame result = c.append(pd.Series(c.sum(), name='Total'))
执行任意一种方法后,即可得到包含总计行的目标表格。
内容的提问来源于stack exchange,提问作者Rustam Karimov
相关产品推荐
相关产品推荐

