Pandas透视DataFrame调整多级列顺序获取双值列方法
问题根因
pandas.DataFrame.pivot()在传入多个values字段时,会默认将值字段作为多级列的最顶层,因此你得到的列层级顺序是[值类型, Region, Country],和要求的[Region, Country, 值类型]顺序不符。另外你贴的代码存在两处笔误:
- values参数中写了不存在的字段
Eother info,正确字段名是other info - index参数中多传入了需求未提及的
MATKL字段,可根据实际业务需要决定是否保留
解决方案
透视完成后通过reorder_levels()调整列的层级顺序,再按层级排序保证分块逻辑符合预期,代码如下:
# 生成基础透视表 x = df_out.pivot( index=['ProductGroup', 'Category', 'ProductFamily'], columns=['Region', 'Country'], values=['value', 'other info'] ) # 调整列层级顺序:原层级顺序为[值类型, Region, Country],重排为[Region, Country, 值类型] x = x.reorder_levels([1, 2, 0], axis=1) # 按调整后的列层级排序,确保同Region、同Country下的两个指标相邻展示 x = x.sort_index(axis=1)
可选优化
如果需要自定义各列层级的显示名称,可以追加一行代码修改:
x.columns.names = ['Region', 'Country', '指标类型']
调整后的透视表完全符合要求:
- 列第一层按Region分块
- 第二层在对应Region块下按Country分块
- 第三层在对应Country下展示
value和other info两个值
内容的提问来源于stack exchange,提问作者jvels
相关产品推荐
相关产品推荐

