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

如何在Pandas中按多列匹配并替换DataFrame的指定列值?

解决方法:用df2的匹配值替换df1的对应列

你已经通过df1.merge(df2, on=['col1', 'col2'])找到了匹配的行,接下来可以通过两种方式完成替换需求:

方法一:基于左连接(Left Merge)的分步处理

这种方法更直观,适合理解整个匹配替换的过程:

  1. 首先执行左连接,保留df1的所有行,同时把df2的匹配值带进来:
merged_df = df1.merge(df2, on=['col1', 'col2'], how='left', suffixes=('_x', '_y'))

这时候你会得到包含col3_x(df1原数据)和col3_y(df2匹配数据)的结果,没有匹配的行col3_y会是NaN。

  1. 生成新的col3列:优先使用df2的col3_y(如果存在匹配),否则保留df1的col3_x:
merged_df['col3'] = merged_df['col3_y'].fillna(merged_df['col3_x'])
  1. 提取需要的列并整理结果:
result_df = merged_df[['col1', 'col2', 'col3']].reset_index(drop=True)

运行后就能得到你想要的输出啦!

方法二:用update方法(更简洁高效)

如果追求代码简洁和性能,推荐用set_index+update的组合,直接基于匹配的索引更新数据:

# 把col1和col2设置为索引,用于匹配
df1_indexed = df1.set_index(['col1', 'col2'])
df2_indexed = df2.set_index(['col1', 'col2'])

# 用df2的col3值更新df1中索引匹配的行
df1_indexed.update(df2_indexed)

# 重置索引回到原来的结构
result_df = df1_indexed.reset_index()

这个方法会直接修改df1的索引匹配行的col3值,不需要额外处理空值,代码更紧凑。

两种方法都能实现你的需求:当col1和col2同时匹配时,用df2的col3替换df1的对应值,不匹配的行则保留df1原数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:06:04