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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:09:02