如何用Python Pandas将两列标题转为行值并重组列结构
解决方案
核心方法:使用pd.melt()实现宽表转长表
这是Pandas处理列转行的标准方案,完全匹配你的需求——将指定列的标题转为新列的行值,对应数据合并到同一列。
示例演示
假设原始表格结构如下(含标识列ID):
| ID | 列1 | 列2 |
|---|---|---|
| 1 | 10 | 20 |
| 2 | 30 | 40 |
目标表格样式:
| ID | 列标题 | 数据值 |
|---|---|---|
| 1 | 列1 | 10 |
| 1 | 列2 | 20 |
| 2 | 列1 | 30 |
| 2 | 列2 | 40 |
代码实现
import pandas as pd # 替换为你的实际DataFrame df = pd.DataFrame({ 'ID': [1, 2], '列1': [10, 30], '列2': [20, 40] }) # 执行转换 result_df = df.melt( id_vars=['ID'], # 保留原结构的列(无此类列可省略) value_vars=['列1', '列2'], # 需要转成行值的目标列 var_name='列标题', # 存储原列标题的新列名 value_name='数据值' # 存储对应数据的新列名 ) print(result_df)
关键参数说明
id_vars:指定无需转换的列,保持原有每行对应关系,无此类列可省略。value_vars:明确要转换的目标列,不指定则默认转换所有非id_vars的列。var_name:自定义存储原列标题的新列名称。value_name:自定义存储对应数据的新列名称。
无标识列的简化场景
如果原始表只有需要转换的两列,无其他保留列,代码可简化为:
df = pd.DataFrame({ '列1': [10, 30], '列2': [20, 40] }) result_df = df.melt( var_name='列标题', value_name='数据值' )
内容的提问来源于stack exchange,提问作者Abin Benny
相关产品推荐
相关产品推荐

