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

Python中无需循环实现双条件VLOOKUP及DataFrame数据更新

基于多列匹配的DataFrame值填充与更新方案

需求说明

我有一个包含14列的大型DataFrame(df1),需基于A、B两列的匹配条件,将另一个长度不同的DataFrame(df2)中的C列值添加到df1的新列中,要求禁止使用for循环。后续需将生成的df3导出再重新导入,并用df4中的值更新df3的C列。

示例数据

df1

AB
01a
11b
21c
32a
42b
52c

df2

ABC
01aS
11bE
21cE

df4

ABC
02aS
12bE
22cS

解决方案

步骤1:从df2匹配填充生成df3

使用Pandas的merge方法进行左连接,基于A、B两列匹配,自动填充C列,无匹配项则为NaN,全程矢量化操作,效率远高于循环。

import pandas as pd

# 构建示例DataFrame(实际使用时替换为你的数据)
df1 = pd.DataFrame({'A': [1,1,1,2,2,2], 'B': ['a','b','c','a','b','c']})
df2 = pd.DataFrame({'A': [1,1,1], 'B': ['a','b','c'], 'C': ['S','E','E']})

# 左连接匹配,生成df3
df3 = df1.merge(df2, on=['A', 'B'], how='left')

生成的df3结果:

ABC
01aS
11bE
21cE
32aNaN
42bNaN
52cNaN

步骤2:导出导入后用df4更新df3的C列

先完成导出/导入操作,再用combine_first方法,优先保留df3原有的非空值,用df4的值填充空值。

# 导出df3到文件
df3.to_csv('df3.csv', index=False)
# 重新导入df3
df3 = pd.read_csv('df3.csv')

# 构建示例df4(实际使用时替换为你的数据)
df4 = pd.DataFrame({'A': [2,2,2], 'B': ['a','b','c'], 'C': ['S','E','S']})

# 将df4转换为以A、B为索引的Series,用于匹配更新
update_values = df4.set_index(['A', 'B'])['C']
# 更新df3的C列
df3['C'] = df3.set_index(['A', 'B'])['C'].combine_first(update_values).reset_index(drop=True)

更新后的df3结果:

ABC
01aS
11bE
21cE
32aS
42bE
52cS

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:00:10