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

如何在保留其他列的前提下合并Pandas DataFrame的两列

解决方案:使用Pandas的melt函数

你要的这种宽表转长表的操作,Pandas里专门有个函数pd.melt()可以完美实现,比你当前的concat方案更简洁优雅。

代码实现

import pandas as pd

# 原始DataFrame
df = pd.DataFrame({
    'Name': ['Bill', 'Bob'],
    'Value_A': [5, 6],
    'Value_B': [10, 11],
    'Something_else': ['Rabbit', 'Cow']
})

# 使用melt转换
result = pd.melt(
    df,
    id_vars=['Name', 'Something_else'],  # 保持不变的列
    value_vars=['Value_A', 'Value_B'],   # 需要合并的列
    value_name='Value'                   # 合并后的列名
).drop(columns='variable')  # 移除自动生成的variable列

print(result)

输出结果

Name Something_else  Value
0  Bill         Rabbit      5
1   Bob            Cow      6
2  Bill         Rabbit     10
3   Bob            Cow     11

如果想要和你目标结果完全一致的行顺序(先Bill的两个值,再Bob的),可以在转换后按Name排序:

result = result.sort_values('Name', ignore_index=True)

此时输出就是:

Name Something_else  Value
0  Bill         Rabbit      5
1  Bill         Rabbit     10
2   Bob            Cow      6
3   Bob            Cow     11

为什么melt更合适?

  • 代码更简洁,不需要多次rename和concat,逻辑一目了然
  • 性能更优,尤其是处理大数据量时,避免了重复复制原始数据
  • 原生支持这种列转行的场景,是Pandas处理宽长表转换的标准工具

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 00:05:55