如何实现pandas groupby后同时输出明细数据与sum聚合求和结果
pandas groupby同时输出明细与聚合求和结果的实现方案
场景1:每条明细行附带所属分组的求和结果
使用groupby的transform方法实现,该方法会返回与原始数据行数一致的聚合结果,直接作为新列追加到原始表即可:
import pandas as pd # 示例原始数据,可替换为你的实际数据 df = pd.DataFrame({ '分组列': ['组1', '组1', '组2', '组2', '组2'], '明细项': ['项1', '项2', '项3', '项4', '项5'], '待求和列': [10, 20, 15, 5, 20] }) # 追加分组求和列 df['分组求和结果'] = df.groupby('分组列')['待求和列'].transform('sum') print(df)
场景2:分组明细后紧跟分组合计行(类Excel分类汇总效果)
遍历每个分组,依次拼接明细行与当前分组的汇总行即可实现,还可按需追加全局总合计:
result = pd.DataFrame() # 遍历所有分组 for group_name, group_df in df.groupby('分组列'): # 拼接当前分组的明细 result = pd.concat([result, group_df]) # 拼接当前分组的汇总行 sum_row = pd.DataFrame({ '分组列': [group_name], '明细项': [f'{group_name}合计'], '待求和列': [group_df['待求和列'].sum()], '分组求和结果': [group_df['待求和列'].sum()] }) result = pd.concat([result, sum_row]) # 可选:追加全局总合计行 total_row = pd.DataFrame({ '分组列': [''], '明细项': ['全局总合计'], '待求和列': [df['待求和列'].sum()], '分组求和结果': [df['待求和列'].sum()] }) result = pd.concat([result, total_row]).reset_index(drop=True) print(result)
内容的提问来源于stack exchange,提问作者BIllyLiu
相关产品推荐
相关产品推荐

