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

Python中如何在DataFrame实现类似Excel的VLOOKUP功能

pandas实现员工表匹配上级ID方案

这个需求本质是按姓名做键值匹配,pandas里有两种非常成熟的实现方式,比Excel VLOOKUP更稳定,不会出现引用范围偏移的问题。

先给测试用的样例数据结构:

import pandas as pd

# 示例员工表
df = pd.DataFrame({
    'Employee ID': [101, 102, 103, 104, 105],
    'Employee Name': ['Zhang San', 'Li Si', 'Wang Wu', 'Zhao Liu', 'Sun Qi'],
    'Manager Name': ['Li Si', 'Wang Wu', 'Zhao Liu', 'Sun Qi', 'Zhang San']
})

方法1:map映射(数据量大优先选,性能最好)

核心逻辑是先构建「员工姓名→员工ID」的键值对映射,直接对Manager Name列做批量查找,代码最简洁,跑数速度最快。

# 生成姓名与工号的映射字典
name_to_id = df.set_index('Employee Name')['Employee ID'].to_dict()
# 直接生成上级ID列
df['Manager ID'] = df['Manager Name'].map(name_to_id)

注意:如果公司存在重名员工,这个方法会默认取最后一次出现的重名员工ID,这类场景建议用工号这类唯一标识做匹配键,避免匹配错误。


方法2:merge左连接(和VLOOKUP逻辑完全对齐,易扩展)

逻辑和Excel VLOOKUP完全一致:把员工姓名、工号单独作为查找表,按Manager Name做左关联匹配,后续如果需要同时提取上级的部门、职级等其他字段,用这个方法可以一次性匹配完成,不用多次写查找逻辑。

# 构造查找参照表
ref_df = df[['Employee Name', 'Employee ID']].rename(columns={'Employee ID': 'Manager ID'})
# 左连接匹配
df = df.merge(
    ref_df,
    left_on='Manager Name',
    right_on='Employee Name',
    how='left'
).drop(columns=['Employee Name_y']).rename(columns={'Employee Name_x': 'Employee Name'})

两种方法最终效果完全一致,如果出现上级不在当前员工列表、姓名拼写错误的情况,对应Manager ID位置会返回NaN,和Excel VLOOKUP返回#N/A的逻辑相同,可以按需做缺失值填充或者异常校验。

内容的提问来源于stack exchange,提问作者Karthik P H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:24:26