Pandas如何将多层行索引第一层转为多层列索引第一层
Pandas多层行索引转多层列索引实现方案
你需要的转换可以通过Pandas原生的多层索引操作完成,仅需几行代码即可实现,完整可运行代码如下:
import pandas as pd import numpy as np # 构造原始DataFrame indx = [('location', 'a'), ('location', 'b'), ('location', 'c'), ('location2', 'a'), ('location2', 'b'), ('location2', 'c')] indx = pd.MultiIndex.from_tuples(indx) col = ['S1','S2','S3'] df = pd.DataFrame(np.random.randn(6, 3), index=indx, columns=col) # 核心转换逻辑 new_df = df.unstack(level=0)\ .swaplevel(axis=1)\ .sort_index(axis=1, level=0) # 输出验证 print(new_df)
操作逻辑说明
unstack(level=0):将行索引的第0层(也就是location/location2所在的层级)从行维度移动到列维度,此时列索引的层级顺序为[S1/S2/S3, location/location2]swaplevel(axis=1):交换列索引的两个层级,将location/location2调整为列索引的第一层,满足你对列层级顺序的要求sort_index(axis=1, level=0):按列索引的第一层排序,保证同一个location下的S1/S2/S3列连续排列,和你给出的预期输出格式完全匹配
输出样例
运行上述代码后得到的new_df结构如下:
location location2 S1 S2 S3 S1 S2 S3 a -0.453549 -0.079797 0.581657 -1.418821 0.847556 0.665808 b -0.458573 -0.732625 -2.277674 1.321825 -0.150274 0.507685 c 0.874403 0.459590 -1.220271 0.894865 -0.502577 2.460591
内容的提问来源于stack exchange,提问作者5sWithCrackScreen
相关产品推荐
相关产品推荐

