如何使用Pandas生成排序选择投票场景下带层级汇总的透视表?
解决方案
可以实现你需要的分层汇总透视表效果,核心思路是手动拼接各层级的聚合结果,再生成带多级索引的汇总表,和Excel的自动分类汇总效果一致。
实现代码
import pandas as pd import numpy as np # 1. 计算各层级汇总数据 # 一级汇总:仅统计第一选择的总票数 level1 = df.groupby('1st', as_index=False)['Votes'].sum() level1[['2nd', '3rd']] = '', '' # 二级汇总:统计第一+第二选择的总票数 level2 = df.groupby(['1st', '2nd'], as_index=False)['Votes'].sum() level2['3rd'] = '' # 三级汇总:原始的第一+第二+第三选择明细汇总 level3 = df.groupby(['1st', '2nd', '3rd'], as_index=False)['Votes'].sum() # 2. 合并所有层级数据,设置多级索引 final_df = pd.concat([level1, level2, level3], ignore_index=True)\ .set_index(['1st', '2nd', '3rd'])\ .sort_index()
效果说明
运行后输出的final_df在控制台/Jupyter中会自动合并上层重复索引,呈现缩进的层级效果,数值完全匹配你期望的各层级计数:
- 第一级行(仅
1st有值,2nd、3rd为空)对应第一选择的总票数 - 第二级行(
1st、2nd有值,3rd为空)对应前两级选择的总票数 - 第三级行对应三级选择的明细票数
如果需要完全复刻Excel的带折叠分割线的交互效果,可以将结果导出到Excel:
final_df.to_excel('rank_vote_summary.xlsx', merge_cells=True)
打开导出的Excel文件后,选中索引列,点击「数据」选项卡下的「组合」,即可自动生成分级折叠视图,和你描述的Excel原生效果完全一致。
原代码问题说明
你原来的pivot_table写法默认仅返回所有索引维度都存在的最细粒度聚合结果,不会自动生成上层维度的小计行,因此只能看到三级都匹配的明细数据,看不到一二级的汇总值。
内容的提问来源于stack exchange,提问作者extDependency
相关产品推荐
相关产品推荐

