如何用Pandas+Python调整透视表列层级,合并同型号列头
调整Pandas透视表的列层级顺序
问题场景
你有如下汽车销售数据:
| Name | Model | Amount | Price |
|---|---|---|---|
| audi | q5 | 1 | 18000 |
| audi | q7 | 5 | 22000 |
使用默认pivot_table生成的透视表列层级为**[数值类型(Amount/Price), 型号(Model)],但你需要将层级调整为[型号(Model), 数值类型(Amount/Price)]**,并让同型号的列头合并显示。
解决方案
在生成透视表后,通过swaplevel交换列的层级,再用sort_index对列进行排序,即可实现目标格式:
import pandas as pd # 读取Excel数据 data = pd.read_excel("cars.xlsx") # 生成初始透视表 pivot_data = pd.pivot_table( data, values=['Amount', 'Price'], index='Name', columns='Model' ) # 交换列的两个层级,将Model放到第一层 pivot_data = pivot_data.swaplevel(axis=1) # 按列层级排序,确保同型号的列连续显示 pivot_data = pivot_data.sort_index(axis=1) # 查看结果 print(pivot_data)
最终输出格式
执行后得到的透视表结构如下:
| q5 | q7 | |
|---|---|---|
| Amount | Price | |
| audi | 1 | 18000 |
原理说明
swaplevel(axis=1):交换列MultiIndex的两个层级,将原来的**[数值类型, 型号]改为[型号, 数值类型]**sort_index(axis=1):按列的层级排序,让相同型号的列集中在一起,实现列头的合并显示
内容的提问来源于stack exchange,提问作者Alik Muradyan
相关产品推荐
相关产品推荐

