You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为现有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")

关键说明

  1. 原代码的margins=True仅支持全局总计,无法直接生成分组级别的汇总
  2. 使用groupby(level='GROUP').sum()精准计算每个分组的合计值
  3. 通过set_levels为分组总计行设置明确的DOMAIN标识(如Group Total),保证多索引结构统一
  4. 最后追加全局总计行,与原需求的输出结构完全匹配

内容的提问来源于stack exchange,提问作者Ravindra Reddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 06:47:38