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

如何合并DataFrame中两个含NaN的同名ID列?

合并DataFrame中同名且互补的ID列

问题场景

DataFrame(df)包含两个同名的ID列,每行的两个ID列中一个为有效ID值,另一个为NaN,需将这两列合并为单个ID列,自动忽略NaN值,最终得到仅含有效ID的单列结果。

输入示例

Date...IDID
12/12/2019...DE1253NaN
12/12/2018...eg562rNaN
12/12/2021...gse233NaN
12/12/2019...NaNwefg32
12/11/2010...NaNrte422
12/10/2021...NaN3fdes4

期望输出

Date...ID
12/12/2019...DE1253
12/12/2018...eg562r
12/12/2021...gse233
12/12/2019...wefg32
12/11/2010...rte422
12/10/2021...3fdes4

解决方法

方法1:快速填充合并(推荐)

利用bfill向后填充NaN,直接提取合并后的有效值:

# 对所有ID列执行向后填充,取第一列作为合并后的ID
df['ID'] = df['ID'].bfill(axis=1).iloc[:, 0]
# 删除重复的ID列,保留唯一的ID列
df = df.loc[:, ~df.columns.duplicated()]

方法2:逐行合并填充

使用combine_first明确将第一列的NaN用第二列的值覆盖:

# 获取两个ID列的数据集
id_columns = df['ID']
# 合并两列,用第二列的值填充第一列的NaN
df['ID'] = id_columns.iloc[:, 0].combine_first(id_columns.iloc[:, 1])
# 去重列
df = df.loc[:, ~df.columns.duplicated()]

方法3:堆叠分组提取

适合扩展到多列同名的场景,通过堆叠和分组提取每行的有效值:

# 堆叠ID列,过滤NaN后按行索引分组取第一个有效值
df['ID'] = df['ID'].stack().groupby(level=0).first()
# 删除重复列
df = df.loc[:, ~df.columns.duplicated()]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 22:45:36