如何用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
相关产品推荐
相关产品推荐

