如何为现有pandas透视表添加分组总计列?求代码修改方案
问题:为Pandas透视表添加GROUP级别的总计列
现有Python Pandas代码:
for sheet in prio_list: df_pivot_comp = pd.pivot_table(pd.read_excel(excel_file,sheet_name=sheet),\ values=['COMPILER WARNING'], columns=None, index=['GROUP','DOMAIN'],\ aggfunc='count',margins=True,margins_name='Total',fill_value=0)
当前代码生成的透视表仅包含全局总计(Total行),需要添加GROUP级别的总计行——即每个GROUP下所有DOMAIN的汇总数据。尝试使用group_count = df_pivot_comp.sum(level='GROUP')未达到预期效果,需修改代码实现需求。
解决方案
要实现分组级别的总计,需在基础透视表生成后单独计算分组汇总,并合并到结果中,以下是修改后的完整代码:
import pandas as pd for sheet in prio_list: # 读取工作表数据 df = pd.read_excel(excel_file, sheet_name=sheet) # 生成不带全局总计的基础透视表 df_pivot_comp = pd.pivot_table( df, values=['COMPILER WARNING'], index=['GROUP', 'DOMAIN'], aggfunc='count', fill_value=0 ) # 计算每个GROUP的汇总值,并设置标识性索引 group_totals = df_pivot_comp.groupby(level='GROUP').sum() group_totals.index = group_totals.index.set_levels(['Group Total'], level='DOMAIN') # 合并基础表与分组总计,保持索引排序 df_with_group_totals = pd.concat([df_pivot_comp, group_totals]).sort_index() # 添加全局总计行(与原需求的Total行一致) grand_total = pd.DataFrame( {'COMPILER WARNING': [df_pivot_comp.sum().iloc[0]]}, index=pd.MultiIndex.from_tuples([('Total', '')], names=['GROUP', 'DOMAIN']) ) # 最终结果 df_final = pd.concat([df_with_group_totals, grand_total]) # 可根据需求输出或保存 print(df_final) # df_final.to_excel(f"{sheet}_result.xlsx")
关键说明
- 原代码的
margins=True仅支持全局总计,无法直接生成分组级别的汇总 - 使用
groupby(level='GROUP').sum()精准计算每个分组的合计值 - 通过
set_levels为分组总计行设置明确的DOMAIN标识(如Group Total),保证多索引结构统一 - 最后追加全局总计行,与原需求的输出结构完全匹配
内容的提问来源于stack exchange,提问作者Ravindra Reddy
相关产品推荐
相关产品推荐

