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

如何使用Pandas对多层级列执行Melt操作转换DataFrame格式

Pandas 双层列多级索引宽表转长表实现方法

核心思路通过stack方法堆叠列方向的多级索引,再重置索引并重命名即可实现需求,该方案支持动态新增x开头的顶层字段,无需额外修改适配代码。

完整代码示例

1. 测试数据构造(仅用于验证效果,你可以跳过这一步直接用自己的DataFrame操作)

import pandas as pd

# 构造和你描述结构完全一致的样例DataFrame
columns = pd.MultiIndex.from_product([['x1', 'x2', 'x3'], ['a', 'b']])
df = pd.DataFrame([[1,2,3,4,2,4]], index=['foo'], columns=columns)
df.index.name = 'id'

2. 核心转换逻辑

# 堆叠列多级索引 → 重置索引转成普通列 → 重命名为目标列名
result = df.stack([0, 1])\
           .reset_index()\
           .rename(columns={'level_1': 'category', 'level_2': 'type', 0: 'values'})

# 可选:调整列顺序和输出样例完全对齐
result = result[['id', 'category', 'type', 'values']]

逻辑说明

  • stack([0,1]):依次把列方向的第0级(顶层x1/x2/x3分类)、第1级(次层a/b类型)索引堆叠到行方向,最终得到的Series索引结构为(原行id、顶层分类、次层类型),值对应原单元格的数值
  • reset_index():将多级行索引全部转换为普通DataFrame列
  • rename():按照需求对生成的默认列名做重映射
    执行后输出的result就是你需要的长表格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:54:01