如何将Pandas DataFrame的多级列转换为多级索引完成结构重塑
实现方案
你可以直接用Pandas内置的stack方法完成多级列的重塑,不需要手动拆分拼接,完整实现代码如下:
import pandas as pd # 假设你的原始DataFrame变量名为df # 先给多级列设置层级名,方便后续操作 df.columns.names = ['metric', 'sym'] # 核心转换逻辑 result = df.stack(level='sym')\ .swaplevel('date', 'sym')\ .sort_index()
操作说明
stack(level='sym'):将存放A/B值的sym列层级从列索引移动到行索引,此时行索引顺序为[date, sym]swaplevel:交换两个行索引的顺序,得到你需要的[sym, date]层级结构sort_index():按索引排序,保证同一个sym下的date按时间顺序排列
如果没有给列设置层级名,也可以直接用层级编号操作,层级从左到右从0开始计数,对应代码:
result = df.stack(level=1).swaplevel(0,1).sort_index() # 给结果的行索引设置名称,方便后续分组操作 result.index.names = ['sym', 'date']
后续分组操作示例
处理完成后你可以直接基于sym层级做分组计算,不需要拆分DataFrame:
# 按sym分组计算x1的平均值 sym_x1_mean = result.groupby(level='sym')['x1'].mean() # 按sym分组新增衍生列:x1与x2的差值 result['x_diff'] = result.groupby(level='sym').apply(lambda df: df['x1'] - df['x2']).droplevel(0)
内容的提问来源于stack exchange,提问作者jgarber79
相关产品推荐
相关产品推荐

