如何将Pandas列MultiIndex的第一层转换为行MultiIndex
实现方法
你只需要调用Pandas的stack方法,指定要移动的列层级即可,一行代码就能实现目标效果:
import pandas as pd # 你的原始构造代码 df = pd.DataFrame([[i+10*j for i in range(6)] for j in range(5)], index=[f"item{i}" for i in range(5)]) df.columns = pd.MultiIndex.from_product((["abc", "xyz"], ["one", "two", "three"])) # 核心转换代码 res = df.stack(level=0)
输出的res就是你需要的目标结构。
思路说明
- 这个需求本质是将列方向的多层索引(MultiIndex)中指定层级,移动到行方向的多层索引中,Pandas内置的
stack函数就是专门用来处理这类宽表转长表的层级移动场景 - 你的列MultiIndex一共有两层:第一层(
level=0)是abc/xyz,第二层(level=1)是one/two/three。调用stack(level=0)就是把列的第一层移动到行索引的末尾,剩下的列第二层保留作为新的列名,刚好匹配你要的结构 - 如果需要调整行索引的层级先后顺序,可以额外调用
reorder_levels方法,这个场景下默认的输出顺序已经和你的目标一致,不需要额外调整
内容的提问来源于stack exchange,提问作者Honza S.
相关产品推荐
相关产品推荐

