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

Python:合并DataFrame两列并复制对应ID列单元格的方法

解决DataFrame合并列并复制ID的问题

问题场景

现有一个包含ID、col1、col2三列的DataFrame:

ID      col1  col2
0  item_1  abc   NaN
1  item_2  bcd   NaN
2  item_3  NaN   NaN
3  item_4  mnb   lkj

需将col1和col2合并为新的col1列,同时复制对应ID列单元格,得到如下结果:

ID      col1
item_1  abc
item_2  bcd
item_3  NaN
item_4  mnb
item_4  lkj

注:ID为普通列而非索引,尝试过stack().reset_index()方法但不符合需求,求可行方案。

解决方案

我来帮你搞定这个问题!用pandas的melt函数就能完美解决,这个方法专门用于宽表转长表,比stack更贴合你的需求——它能直接保留ID作为普通列,不用折腾索引。具体步骤如下:

  1. 构造测试数据(可选,用于验证)
import pandas as pd

df = pd.DataFrame({
    'ID': ['item_1', 'item_2', 'item_3', 'item_4'],
    'col1': ['abc', 'bcd', pd.NA, 'mnb'],
    'col2': [pd.NA, pd.NA, pd.NA, 'lkj']
})
  1. 使用melt转换列
# 转换宽表为长表,保留ID列,合并col1和col2为新的col1
result = df.melt(
    id_vars='ID',          # 指定要保留的核心列
    value_vars=['col1', 'col2'],  # 指定需要合并的目标列
    value_name='col1'     # 给合并后的列设置名称
).drop(columns='variable')  # 删除自动生成的原列名标记列,这个是我们不需要的
  1. 处理重复的NaN行
    原数据中item_3的col1和col2都是NaN,转换后会生成两行重复的记录,我们用drop_duplicates去重,只保留一行即可:
result = result.drop_duplicates(subset=['ID', 'col1'], keep='first')
  1. 重置索引(可选)
    如果需要让结果的索引从0开始连续编号,可以加上这一步:
result = result.reset_index(drop=True)

最终结果

执行完上述代码后,输出的result就是你想要的格式:

ID  col1
0  item_1   abc
1  item_2   bcd
2  item_3  <NA>
3  item_4   mnb
4  item_4   lkj

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:57:29