登录
首页 >  文章 >  python教程

Pandas DataFrame 列名转列值重塑方法

时间:2026-05-01 12:00:47 139浏览 收藏

本文揭秘了如何用 pandas 的 melt + pivot 组合实现一种高级数据重塑——不是简单转置,而是将列名“降级”为数据值、把原单元格内容(如“1st choice”)“升级”为新列名,从而完成语义驱动的行列角色对调;通过保留原始索引、精准透视与可选清理,一行链式操作即可生成结构清晰、业务含义明确的新表,是处理偏好调查、多选项映射等场景的高效标准解法。

如何将 Pandas DataFrame 的列名转换为列值并重塑结构

本文介绍使用 pandas 的 melt + pivot 组合操作,将原始 DataFrame 的列名(如 "Movie 1", "Movie 2")转化为新列的值,并按原单元格内容(如 "1st choice", "2nd choice")重新组织行列结构,实现行列角色对调。

本文介绍使用 pandas 的 `melt` + `pivot` 组合操作,将原始 DataFrame 的列名(如 "Movie 1", "Movie 2")转化为新列的值,并按原单元格内容(如 "1st choice", "2nd choice")重新组织行列结构,实现行列角色对调。

在数据分析中,常需对 DataFrame 进行“行列转置式”的结构重组——但不同于简单的 .T 转置(它仅交换行列索引),本例要求:原列名变为数据值,原单元格值变为新列名。这本质上是一次“值驱动的透视重构”,核心思路是:先将宽表“拉长”(melt),再以原单元格值为新列名进行“聚拢”(pivot)。

以下为推荐的简洁写法:

import pandas as pd

# 构造原始 DataFrame
df = pd.DataFrame({
    'Movie 1': ['1st choice', '2nd choice'],
    'Movie 2': ['2nd choice', '1st choice']
})

# 执行重组织:列名 → 值,原值 → 新列名
out = (df.melt(ignore_index=False)
         .pivot(columns='value', values='variable')
         .rename_axis(index=None, columns=None))

输出结果为:

  1st choice 2nd choice
0    Movie 1    Movie 2
1    Movie 2    Movie 1

✅ 关键说明:

  • melt(ignore_index=False) 保留原始行索引(避免打乱顺序),生成三列:variable(原列名)、value(原单元格值)、variable 对应的值(即列名本身);
  • pivot(columns='value', values='variable') 将 value 列唯一值作为新列名,variable 列作为填充值,自动按原索引对齐行;
  • rename_axis(...) 可选,用于清除默认的轴名称(如 value 列名残留),使结果更干净。

⚠️ 注意事项:

  • 若原 DataFrame 行索引非数字或存在重复,建议改用更稳健的显式索引方式(如第二个示例中的 reset_index().melt('index'));
  • pivot 要求 (index, columns) 组合唯一,若存在重复组合(如同一行中出现两次 "1st choice"),需改用 pivot_table 并指定聚合函数(如 aggfunc='first');
  • 列值(如 "1st choice")必须可哈希且无歧义;若含空格或特殊字符,pivot 仍能正常处理,但后续访问列时需使用方括号(如 out['1st choice'])。

该方法高效、可读性强,是 pandas 中处理此类“语义转置”任务的标准范式。

今天关于《Pandas DataFrame 列名转列值重塑方法》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

资料下载
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>