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

如何用Python在Excel中实现数据小计?现有代码未达预期结果

如何生成带小计的分组统计Excel结果

问题描述

现有代码可正常运行,但未生成预期的分组小计数据:

xl = pd.ExcelFile("D:/write_data.xlsx")

df = xl.parse("Sheet1") 

df['C'] = df['C'].astype(str)

df = df.groupby(["A", "B", "C"])['C'].count()

df1 = df.groupby(["A", "B"]).sum()

df1.index = [df1.index.get_level_values(0), df1.index.get_level_values(1), ['MFA Total'] * len(df1)]

df.to_excel('D:/pandasout.xlsx')

预期效果:按A、B、C三级分组统计数量,每个A+B分组末尾添加一行「MFA Total」,展示该分组下所有C项的总数,Excel输出清晰呈现明细与对应小计。

解决方案

需要将明细统计与小计数据合并后再输出,修改后的代码如下:

import pandas as pd

# 读取Excel数据
xl = pd.ExcelFile("D:/write_data.xlsx")
df = xl.parse("Sheet1") 
df['C'] = df['C'].astype(str)

# 统计明细数据:按A、B、C分组计数,重命名统计列
detail_df = df.groupby(["A", "B", "C"])['C'].count().rename('Count')

# 生成小计数据:按A、B分组求和,构建匹配的三级索引
subtotal_df = detail_df.groupby(["A", "B"]).sum()
subtotal_df.index = pd.MultiIndex.from_tuples(
    [(a, b, 'MFA Total') for a, b in subtotal_df.index],
    names=['A', 'B', 'C']
)
subtotal_df.name = 'Count'

# 合并明细与小计,按索引排序确保小计位置正确
result_df = pd.concat([detail_df, subtotal_df]).sort_index(level=['A', 'B'])

# 输出到目标Excel文件
result_df.to_excel('D:/pandasout.xlsx')

关键说明

  • 给统计列重命名为Count,让Excel输出的表头更直观
  • 用pd.MultiIndex.from_tuples规范构建小计的三级索引,避免手动拼接索引的潜在错误
  • 通过sort_index保证每个A+B分组的小计行位于该组所有明细行之后
  • 最终输出的Excel会保留三级索引结构,完美匹配预期的明细+小计展示效果

内容的提问来源于stack exchange,提问作者badar Qureshi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 04:35:25