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

如何基于匹配ID用另一DataFrame的值替换DataFrame中的缺失值?

用小型DataFrame匹配ID填充大型DataFrame缺失值的最优方法

直接用pandas的向量化操作即可,完全不需要遍历行——这类操作底层基于C实现,效率比Python循环高几个数量级,尤其适合大型数据集。针对你的示例,推荐两种高效实现方式:

方法一:使用combine_first

该方法会用第二个DataFrame中的非缺失值填充第一个DataFrame的缺失值,自动按索引匹配:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({"A": [1, 2, 3, 4, 5], "B": ["a", np.nan, "c", "d", np.nan]})
df2 = pd.DataFrame({"A": [2, 5], "B": ["b", "e"]})

# 将ID列(A)设为索引,实现精准匹配
df1_idx = df1.set_index("A")
df2_idx = df2.set_index("A")

# 填充缺失值后恢复原索引结构
df_filled = df1_idx.combine_first(df2_idx).reset_index()
print(df_filled)

输出结果:

A  B
0  1  a
1  2  b
2  3  c
3  4  d
4  5  e

方法二:使用update

如果需要直接修改原大型DataFrame(df1),可以用update方法——它会用df2中的值覆盖df1对应位置的缺失值:

import pandas as pd
import numpy as np

df1 = pd.DataFrame({"A": [1, 2, 3, 4, 5], "B": ["a", np.nan, "c", "d", np.nan]})
df2 = pd.DataFrame({"A": [2, 5], "B": ["b", "e"]})

# 设置索引对齐
df1.set_index("A", inplace=True)
df2.set_index("A", inplace=True)

# 直接更新df1的缺失值
df1.update(df2)
# 恢复原索引
df1.reset_index(inplace=True)
print(df1)

输出结果和方法一完全一致。

注意事项

  • 确保两个DataFrame的ID列(示例中的"A")值类型一致,避免匹配失败
  • 如果需要填充多列,这两种方法都支持自动匹配列名,无需额外处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 06:15:44