如何创建多索引透视表,按区域汇总枢纽最大客户数的求和结果?
解决方案
你可以通过先为每条记录标记对应枢纽的最大客户数,再按区域、类型、月份汇总求和的方式,直接得到目标结果,无需先展示所有枢纽的数据。具体步骤如下:
步骤1:为每条数据添加对应枢纽的最大客户数
使用transform方法,给原DataFrame的每条记录添加上该枢纽(Hub)对应的最大客户数,这样即使同一个枢纽多次被标记,每条记录都会使用它的最大值:
import pandas as pd # 假设你的数据存储在变量out中 out['Hub_Max_Customers'] = out.groupby('Hub')['Customers'].transform('max')
步骤2:按区域、类型、月份汇总求和
按Location(区域)、Type(类型)、Month(月份)分组,对每个分组内的枢纽最大客户数求和:
summary_data = out.groupby(['Location', 'Type', 'Month'])['Hub_Max_Customers'].sum().reset_index()
步骤3:生成多层列的透视表
将汇总结果转换为你需要的透视表格式,行是区域,列是「类型+月份」的层级组合,并用fillna(0)填充无数据的月份为0:
final_pivot = summary_data.pivot( index='Location', columns=['Type', 'Month'], values='Hub_Max_Customers' ).fillna(0)
结果验证(基于你的示例数据)
运行上述代码后,针对你的示例数据,会得到如下结果:
| Location | Type 1 | Type 2 | |||
|---|---|---|---|---|---|
| January | April | June | January | August | |
| NY | 250.0 | 250.0 | 0.0 | 0.0 | 0.0 |
| CA | 0.0 | 0.0 | 14.0 | 111.0 | 111.0 |
完全符合你要求的「按区域汇总、多层列展示」的格式,同时自动排除了枢纽多次标记的重复计算问题。
方法优势
- 无需处理数百个枢纽的中间数据,直接一步到位生成区域汇总结果
- 所有操作都是Pandas的高效内置方法,适合处理大型DataFrame
- 逻辑清晰,易于维护和调整
内容的提问来源于stack exchange,提问作者marmack
相关产品推荐
相关产品推荐

