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

Python Pandas多级列索引处理:将表头第一层级设置为行索引

Pandas多级列头宽表转长表实现方案

实现思路

你的需求是将带多级列头的宽格式表转为行维度上展开的长格式表,核心通过stack方法将多级列头的上层维度从列侧移动到行侧,再重置索引转为普通列即可实现。

完整可运行代码

import pandas as pd
import numpy as np

# --------------------------
# 以下为模拟原始数据的构造代码,实际使用时替换为你自己的df即可
# --------------------------
columns = pd.MultiIndex.from_product(
    [["2021", "2022", "2023"], ["销售额", "利润", "销量"]],
    names=["年份", "指标"]
)
index = ["华东", "华北", "华南", "西南"]
df = pd.DataFrame(np.random.randint(100, 1000, size=(4, 9)), index=index, columns=columns)
print("原始数据预览:")
print(df.head())

# --------------------------
# 核心转换代码
# --------------------------
# 给多级列头设置层级名,若你的列头已经有名称可跳过此步
df.columns.names = ["上层列名", "下层列名"]
# 将上层列头堆叠到行维度,这里level参数填你要移动的列层级的名称或者序号(最顶层为0)
df = df.stack(level="上层列名").reset_index()
# 可选:调整列顺序为你需要的目标顺序,列名替换为你实际的字段名
df = df.reindex(columns=["level_0", "上层列名", "销售额", "利润", "销量"])
# 可选:重命名列名,替换为你实际的业务名称
df = df.rename(columns={"level_0": "地区", "上层列名": "年份"})

print("\n转换后数据预览:")
print(df.head())

参数调整说明

  • 如果你的多级列头超过2层,可多次调用stack方法,或者传入level参数为列表一次性移动多个层级
  • 如果你原始表的行索引是默认的自增数字无业务含义,可先执行df = df.reset_index()再做堆叠操作
  • 如果需要保留原始空值对应的行,可在stack方法中添加dropna=False参数:df.stack(level="上层列名", dropna=False)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:45:05