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

如何基于多列匹配条件用另一个dataframe的值替换当前dataframe列值

实现方法

以下是基于Python Pandas的两种可直接运行的实现方案:

方案1:使用update方法(更简洁,推荐)

update方法默认按索引匹配替换值,刚好适配你按双列匹配替换的需求:

import pandas as pd

# 示例数据构造
df1 = pd.DataFrame({
    'Year': [2019, 2019, 2019],
    'Week': [1, 2, 3],
    'Sales': [5000, 6075, 7435]
})
df2 = pd.DataFrame({
    'Year': [2018, 2019],
    'Week': [8, 2],
    'Sales': [5650, 7150]
})

# 将双匹配列设为复合索引
df1 = df1.set_index(['Year', 'Week'])
df2 = df2.set_index(['Year', 'Week'])

# 按索引匹配替换Sales值,无匹配的行保留原值
df1['Sales'].update(df2['Sales'])

# 重置索引恢复原始列结构
df1 = df1.reset_index()
print(df1)

输出结果:

Year  Week  Sales
0  2019     1   5000
1  2019     2   7150
2  2019     3   7435

方案2:使用左连接实现(无需修改原索引)

如果不想改动原DataFrame的索引,可以用左连接加空值填充的逻辑实现:

# 左连接两个表,用后缀区分不同来源的Sales列
merged_df = df1.merge(df2[['Year', 'Week', 'Sales']], on=['Year', 'Week'], how='left', suffixes=('', '_new'))
# 优先用匹配到的新Sales值,无匹配则保留原值
merged_df['Sales'] = merged_df['Sales_new'].fillna(merged_df['Sales']).astype(int)
# 删除多余的辅助列得到最终结果
df1 = merged_df.drop(columns=['Sales_new'])
print(df1)

两种方案都可以得到你期望的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:00:02