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

如何在Pandas中重排多层索引(MultiIndex)矩阵的列

解决Pandas多层列索引层级交换问题

核心方法:交换层级并排序

要将列多层索引的层级从「数据类型(Data_1/Data_2/Data_3)在前,海拔在后」转换为「海拔在前,数据类型在后」,只需两步:

  • 用swaplevel交换列的两个层级
  • 用sort_index按新的顶层索引排序,确保同海拔的列归类在一起

代码示例

1. 构造模拟数据(复现你的场景)

import pandas as pd

# 原始数据:每行是传感器在某海拔下的三类读数
raw_data = {
    "ID": ["Sensor_A", "Sensor_A", "Sensor_B", "Sensor_B"],
    "Altitude": ["Alt_1", "Alt_2", "Alt_1", "Alt_2"],
    "Data_1": [10, 20, 15, 25],
    "Data_2": [30, 40, 35, 45],
    "Data_3": [50, 60, 55, 65]
}
df = pd.DataFrame(raw_data)

# 执行pivot得到你当前的多层列索引结构
# 这里通过melt+ pivot复现你的结果:列第0层是Data_1/Data_2/Data_3,第1层是海拔
df_melted = df.melt(id_vars=["ID", "Altitude"], var_name="Data_Type", value_name="Value")
df_pivoted = df_melted.pivot(index="ID", columns=["Data_Type", "Altitude"], values="Value")

2. 转换列层级结构

# 交换列的两个层级(位置0和1)
df_updated = df_pivoted.swaplevel(axis="columns")

# 按新的顶层索引(海拔)排序,让同海拔的列集中显示
df_updated = df_updated.sort_index(axis="columns", level=0)

关键说明

  • 如果你的列层级有自定义名称(比如data_type和altitude),可以直接指定名称交换,更直观:
    df_updated = df_pivoted.swaplevel("data_type", "altitude", axis="columns")
    
  • 只交换层级不排序的话,列的顺序会混乱,看起来没达到预期效果,这是很多人尝试后失败的原因。

内容的提问来源于stack exchange,提问作者Stefan Thuwis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:27:34