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

如何用Join填充Pandas DataFrame中匹配的NA值

解决用DataFrame填充另一DataFrame NA值的问题

你遇到的重复列问题,是因为merge时两个表都有C列,而on只指定了A、B,所以合并后会自动给重复列加_x(来自data1)和_y(来自data2)后缀,且这个操作不会自动完成NA填充。下面是几种可行的解决方案:

方法1:用combine_first(最简洁)

这个方法专门用来用一个DataFrame填充另一个的NA值,只需先让两个表按匹配键对齐:

import pandas as pd

data1 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, None]], columns=['A', 'B', 'C'])
data2 = pd.DataFrame([[7, 8, 9]], columns=['A','B','C'])

# 将A、B设为索引确保匹配对齐
data1_idx = data1.set_index(['A', 'B'])
data2_idx = data2.set_index(['A', 'B'])

# 填充NA后恢复原索引
filled_data = data1_idx.combine_first(data2_idx).reset_index()
print(filled_data)

输出结果:

A  B    C
0  1  2  3.0
1  4  5  6.0
2  7  8  9.0

方法2:merge后手动填充

如果要保留merge的思路,可以合并后手动处理重复列:

import pandas as pd

data1 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, None]], columns=['A', 'B', 'C'])
data2 = pd.DataFrame([[7, 8, 9]], columns=['A','B','C'])

# 执行左连接
merged = data1.merge(data2, on=['A','B'], how='left')
# 用data2的C值填充data1的NA,清理冗余列
merged['C'] = merged['C_x'].fillna(merged['C_y'])
filled_data = merged.drop(['C_x', 'C_y'], axis=1)
print(filled_data)

方法3:用update原地更新

update会直接用匹配到的值覆盖原表的NA,注意它是原地修改操作:

import pandas as pd

data1 = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, None]], columns=['A', 'B', 'C'])
data2 = pd.DataFrame([[7, 8, 9]], columns=['A','B','C'])

# 设置索引对齐
data1.set_index(['A', 'B'], inplace=True)
data2.set_index(['A', 'B'], inplace=True)

# 用data2更新data1的NA值
data1.update(data2)
filled_data = data1.reset_index()
print(filled_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 18:45:13