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

如何用df1匹配CUSTOMERID的OPEN_DT值替换df2中OPEN_DT的NaN?

解决DataFrame中NaN值匹配替换问题

场景说明

你有两个DataFrame:

  • df1:存储每个CUSTOMERID对应的唯一开户日期(最小日期)
  • df2:包含重复的CUSTOMERID,其中OPEN_DT列存在部分NaN值,需要用df1中对应客户的日期替换这些NaN

可行解决方案

方法1:用字典映射快速填充

先将df1转换为客户ID到开户日期的映射字典,再通过map匹配后填充NaN:

# 构建客户ID与开户日期的映射字典
open_dt_mapping = df1.set_index('CUSTOMERID')['OPEN_DT'].to_dict()

# 填充df2中的NaN值
df2['OPEN_DT'] = df2['OPEN_DT'].fillna(df2['CUSTOMERID'].map(open_dt_mapping))

方法2:通过关联表结合combine_first替换

先关联两个DataFrame,再优先保留df2原有值,缺失时用df1的对应值:

# 左关联df2和df1,保留df2所有行
merged_df = df2.merge(df1, on='CUSTOMERID', suffixes=('', '_df1'), how='left')

# 替换NaN:优先用df2原OPEN_DT,无值则取df1的对应日期
df2['OPEN_DT'] = merged_df['OPEN_DT'].combine_first(merged_df['OPEN_DT_df1'])

# 清理临时列(可选)
merged_df.drop('OPEN_DT_df1', axis=1, inplace=True)

常见失败原因

之前关联后替换失败,大概率是以下问题:

  • 关联方式错误:用了inner关联导致丢失df2中未匹配到的行
  • 未正确处理重复列名:关联后未区分原df2和df1的OPEN_DT列
  • 未使用fillna或combine_first完成NaN替换,仅做了关联操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 14:48:16