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

Pandas:如何合并不同形状DataFrame并填充NaN值?

解决Pandas不同形状DataFrame的NaN填充问题

你的需求是基于No和pl.两个键,用df2中的Expected值填充df1对应位置的NaN,之前的代码没生效是因为fillna要求填充的数据源和原DataFrame形状完全匹配(行列数一致),而merge后的结果和df1结构不同,所以无法正确映射填充。下面给你两种简单可行的方案:

方案一:左连接 + combine_first

这种方法先通过左连接把df2的匹配值带到df1中,再用combine_first合并列,保留原df1的非NaN值,替换匹配到的NaN:

# 复制原df1避免修改原始数据
df_final = df1.copy()
# 左连接df2,将匹配到的Expected值作为新列
merged = df_final.merge(df2, on=['No', 'pl.'], how='left', suffixes=('', '_from_df2'))
# 合并Expected列:保留原有的非NaN值,用df2的值填充NaN
df_final['Expected'] = merged['Expected'].combine_first(merged['Expected_from_df2'])
# 删掉临时列
df_final = df_final.drop(columns='Expected_from_df2')

方案二:索引映射 + combine_first

这种方法更简洁,通过设置复合索引直接匹配对应值:

df_final = df1.copy()
# 将df2设置为以No和pl.为索引的Series,直接匹配填充df1的NaN
df_final['Expected'] = df_final['Expected'].combine_first(
    df2.set_index(['No', 'pl.'])['Expected']
)

这两种方法都会得到你想要的最终DataFrame,其中方案二更简洁高效,适合这种按多键匹配填充的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:47:43