如何通过简单方法对多层索引DataFrame完成目标结构转换
多层索引DataFrame结构转换简便方案
需求说明
需要将列方向为两层MultiIndex(层级名C1、second)、行方向为单层索引(值为N1/N2)的左表,转换为行方向为两层MultiIndex(C1/second)、列方向为单层索引(N1/N2)的右表结构,转换效果参考下图:
原始左表构造代码如下:
import pandas as pd import numpy as np arrays = [ ["T1", "T1", "T2", "T2"], ["C2", "C3", "C2", "C3"], ] tuples = list(zip(*arrays)) index = pd.MultiIndex.from_tuples(tuples, names=["C1", "second"]) Left_table = pd.DataFrame(np.random.randn(2, 4), index=["N1", "N2"], columns=index)
最简实现
不需要组合使用pivot、melt等变形函数,针对多层索引的轴转换有原生极简写法:
- 当列索引层级顺序和目标行索引层级顺序完全匹配时,直接转置即可,一行代码完成转换:
Right_table = Left_table.T
- 如果需要灵活调整层级顺序,可使用
stack+unstack组合,方便后续自定义层级排列:
# 先将列的两层索引全部堆叠到行方向,再把原行索引转到列方向 Right_table = Left_table.stack(level=["C1", "second"]).unstack(level=0)
两种写法输出结果完全一致,转换后行索引第一层为C1(值T1/T2)、第二层为second(值C2/C3),列名为N1/N2,和目标右表结构完全匹配。
内容的提问来源于stack exchange,提问作者saman taheri
相关产品推荐
相关产品推荐

