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

如何基于条件从pandas DataFrame取数写入另一DataFrame(实现VLOOKUP功能)

pandas实现Excel VLOOKUP功能的操作方法

我们可以通过两种常用方式实现按ID匹配、把DF1的列值补充到DF2的需求,和Excel VLOOKUP逻辑完全对齐:

方法1:merge方法(适合多列匹配场景)

这是最通用的方案,可一次性将DF1的多个匹配列合并到DF2中。

示例代码

import pandas as pd

# 示例DF1:匹配数据源,包含ID和待提取的其他列
DF1 = pd.DataFrame({
    'ID': [1,2,3,4,5],
    '姓名': ['张三','李四','王五','赵六','钱七'],
    '部门': ['技术部','产品部','运营部','销售部','人事部']
})

# 示例DF2:待填充的目标表
DF2 = pd.DataFrame({
    'ID': [2,3,5,6,7],
    '考勤天数': [22,21,23,19,20]
})

# 核心匹配逻辑
result = pd.merge(
    left=DF2,
    right=DF1,
    on='ID', # 两个表的匹配公共列,列名不同时可分别指定left_on、right_on
    how='left' # 保留DF2的所有行,匹配不到的字段填充NaN,和VLOOKUP默认逻辑一致
)

常用调整项

  • 若只保留两个表ID完全匹配的行,将how='left'改为how='inner'
  • 若DF1存在重复ID,可先对DF1去重后再匹配,保证和VLOOKUP仅返回第一个匹配结果的逻辑一致:
    DF1_unique = DF1.drop_duplicates('ID', keep='first')
    result = pd.merge(DF2, DF1_unique, on='ID', how='left')
    
  • 匹配完成后可通过fillna方法替换缺失值:
    # 将NaN替换为空字符串
    result = result.fillna('')
    

方法2:map方法(适合单列提取场景)

如果只需要从DF1提取单个列到DF2,用map方法更轻量便捷:

# 构造ID到目标字段的映射关系
id_to_dept = DF1.set_index('ID')['部门']
# 映射到DF2的新列
DF2['部门'] = DF2['ID'].map(id_to_dept)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:24:01