You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过简单方法对多层索引DataFrame完成目标结构转换

多层索引DataFrame结构转换简便方案

需求说明

需要将列方向为两层MultiIndex(层级名C1、second)、行方向为单层索引(值为N1/N2)的左表,转换为行方向为两层MultiIndex(C1/second)、列方向为单层索引(N1/N2)的右表结构,转换效果参考下图:
DataFrame结构转换示例

原始左表构造代码如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 18:39:55