如何在Pandas的groupby每个分组中插入合计行,合计值为分组value列总和
Pandas实现分组新增合计行的方案
假设你已经将示例中的csv数据加载为DataFrame对象df,可参考以下代码实现需求:
import pandas as pd # 1. 按指定字段分组计算value列的总和 sum_df = df.groupby(['eff_date', 'mdl_cd', 'ast_cd'], as_index=False)['value'].sum() # 2. 给合计行补全prop_cd字段值 sum_df['prop_cd'] = 'Hlds' # 3. 新增辅助排序字段,保证原数据在前、新增合计行在后 df['sort_key'] = 0 sum_df['sort_key'] = 1 # 4. 合并原数据和合计行数据 result = pd.concat([df, sum_df], ignore_index=True) # 5. 按业务要求排序,保证分组顺序和行顺序和预期一致 result = result.sort_values(by=['eff_date', 'mdl_cd', 'ast_cd', 'sort_key', 'prop_cd'], ignore_index=True) # 6. 删除辅助排序列,可选保留4位小数匹配示例精度 result = result.drop(columns=['sort_key']).round({'value': 4})
实现说明
- 分组求和时设置
as_index=False,会自动保留eff_date、mdl_cd、ast_cd三个分组字段的取值,不需要额外赋值 - 新增
sort_key辅助列是为了规避prop_cd自然排序时,Hlds因首字母顺序排在Mmt前面的问题,保证每个分组的原始数据全部展示完成后再追加合计行 - 最终输出的
result和你提供的预期结果完全一致
内容的提问来源于stack exchange,提问作者Anil Tiwari
相关产品推荐
相关产品推荐

