如何在保留其他列的前提下合并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
相关产品推荐
相关产品推荐

