如何使用Pandas创建指定格式的多级列透视表?
Python实现多级列透视表解决方案
源数据结构
| Date | Name | P&L | Percentage |
|---|---|---|---|
| 2023.1.1 | Amy | 1.1% | 2% |
| 2023.1.1 | Peter | 1.2% | 3% |
预期透视表格式
| Date | Amy | Peter |
|---|---|---|
| P&L | Percentage | |
| 2023.1.1 | 1.1% | 2% |
问题分析
你当前使用的pivot_table代码生成的列层级顺序是指标(P&L/Percentage)在前,Name在后,和预期的层级顺序相反,所以呈现结果不符合要求。
正确实现方法
可以通过两种方式实现:
方法1:调整pivot_table的列层级顺序
先执行你原来的pivot_table,然后交换列的层级并重新排序:
import pandas as pd # 构造源DataFrame df = pd.DataFrame({ 'Date': ['2023.1.1', '2023.1.1'], 'Name': ['Amy', 'Peter'], 'P&L': ['1.1%', '1.2%'], 'Percentage': ['2%', '3%'] }) # 生成透视表后交换列层级 result = df.pivot_table(index='Date', values=['P&L', 'Percentage'], columns='Name') # 交换列的两个层级,并按Name排序 result = result.swaplevel(axis=1).sort_index(axis=1) # 重置列名的显示(可选,让表头更简洁) result.columns = result.columns.map(' '.join) print(result)
方法2:使用pivot直接生成符合层级的透视表
如果数据没有重复的Date+Name组合,用pivot更直接,默认会把Name作为上层列,指标作为下层列:
result = df.pivot(index='Date', columns='Name', values=['P&L', 'Percentage']) # 同样可以调整列名显示 result.columns = result.columns.swaplevel().map(' '.join) print(result)
两种方法最终都能得到你预期的多级列透视表结构。
内容的提问来源于stack exchange,提问作者Eva
相关产品推荐
相关产品推荐

