如何使用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
相关产品推荐
相关产品推荐

