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

如何在同一pandas DataFrame中实现类似Vlookup的层级上级姓名查询

实现方案

直接用Series.map()就可以完美替代Excel的VLOOKUP功能,不需要多次merge,也不需要创建独立DataFrame,核心思路是先构建「员工姓名-直接主管」的映射字典,逐层向上查询即可:

完整可运行代码

import pandas as pd

# 原始数据集创建
header = ['emp_id','emp_name','emp_manager','emp_org_lvl']
data = [[ 1,'John S'    ,'Bob A',   1],[2,  'Bob A',    'Paul P',   2],[3,  'Paul P',   'Charles Y',    3]]
df = pd.DataFrame(data, columns=header)

# 1、构建姓名到直接主管的映射字典,等价于VLOOKUP的查询范围
name_to_manager = df.set_index('emp_name')['emp_manager'].to_dict()

# 2、逐层查询上级主管
df['lvl2_name'] = df['emp_manager'].map(name_to_manager)
df['lvl3_name'] = df['lvl2_name'].map(name_to_manager)

# 若只需要保留最底层员工(org_lvl=1)的结果,取消注释下一行即可
# df = df[df['emp_org_lvl'] == 1]

print(df)

输出结果

emp_idemp_nameemp_manageremp_org_lvllvl2_namelvl3_name
1John SBob A1Paul PCharles Y
2Bob APaul P2Charles Y
3Paul PCharles Y3

多层级自动化实现

如果组织层级不止3级,不需要手动写每一层的查询代码,可以用循环自动生成所有层级的主管字段:

# 可根据实际组织最大层级调整数值
max_level = 3
current_col = 'emp_manager'
for lvl in range(2, max_level+1):
    col_name = f'lvl{lvl}_name'
    df[col_name] = df[current_col].map(name_to_manager)
    current_col = col_name

方法说明

  • map()方法和Excel VLOOKUP逻辑完全一致:传入的字典就是查询区域,key是查询值,value是返回结果
  • 全程只需要操作1个原始DataFrame,不需要额外创建辅助表,性能远高于多次merge

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 08:36:05