如何在Pandas中按列匹配合并不同大小DataFrame并更新数据
你之前操作失败的核心原因是Pandas赋值时默认会按行索引对齐:你要替换的data_1行索引是2、3、4,但data_2的行索引是0、1、2,两者索引不匹配,直接赋值会出现值错位/不生效的问题。
解决方案1:沿用你已生成的掩码逻辑
你已经生成了正确的布尔掩码mask_array,只需要调用.values取data_2的numpy数组按位置赋值即可跳过索引对齐:
data_1.loc[mask_array, data_2.columns] = data_2.values
解决方案2:更简洁的Pandas原生实现(无需自行写循环生成掩码)
方式A:用isin生成掩码
# 一步生成匹配的布尔掩码 mask = data_1['time'].isin(data_2['time']) # 按位置赋值避免索引对齐问题 data_1.loc[mask, data_2.columns] = data_2.values
方式B:用update方法(适合多列批量替换场景)
将time列设为索引后调用update,自动匹配相同索引的行完成覆盖:
data_1 = data_1.set_index('time') data_2 = data_2.set_index('time') # 用data_2的非空值覆盖data_1匹配索引的行 data_1.update(data_2) # 恢复time为普通列 data_1 = data_1.reset_index()
两种方案执行后打印data_1均可得到你期望的结果:
time column_1 column_2 0 1 2 3 1 2 2 3 2 3 0 0 3 4 0 0 4 5 0 0 5 6 2 3
内容的提问来源于stack exchange,提问作者gleb_shm
相关产品推荐
相关产品推荐

