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

基于Pandas匹配指定列更新另一DataFrame的VALUE列

Pandas按指定列匹配更新指定列的解决方案

核心思路

仅提取第二个DataFrame中用于匹配的A、B列和待更新的Value列,通过复合键匹配后,只更新第一个DataFrame的VALUE列,不改动其他列。

代码实现

1. 初始化示例数据

import pandas as pd

# 需更新的目标DataFrame(df1)
df1 = pd.DataFrame({
    'A': [1, 1, 2],
    'B': [2, 5, 5],
    'C': [3, 3, 3],
    'D': [5, 2, 2],
    'VALUE': [0, 0, 0]
})

# 提供更新值的参考DataFrame(df2)
df2 = pd.DataFrame({
    'A': [5, 1],
    'B': [3, 5],
    'C': [3, 4],
    'D': [2, 3],
    'Value': [1, 1]
})

2. 方法一:映射字典(小数据量友好)

# 构建A+B复合键到Value的映射关系
value_mapping = df2.set_index(['A', 'B'])['Value']

# 仅更新匹配成功的VALUE行,未匹配行保留原值
df1['VALUE'] = df1.apply(
    lambda row: value_mapping.get((row['A'], row['B']), row['VALUE']),
    axis=1
)

3. 方法二:merge合并更新(大数据量高效)

# 仅合并需要的字段,避免污染原DataFrame的其他列
temp_merge = df1.merge(df2[['A', 'B', 'Value']], on=['A', 'B'], how='left')

# 用匹配到的Value替换原VALUE,未匹配项保留原值
df1['VALUE'] = temp_merge['Value'].fillna(temp_merge['VALUE'])

最终结果

执行后df1将变为:

ABCDVALUE
12350
15321
25320

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:15:34