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

如何在Python中将ManagerID映射到对应经理的职位?

经理职位映射问题解决办法

问题出在哪

你的代码有两个关键问题:

  1. 语法错误:df[['ManagerID', 'Job_Title']少了闭合的方括号],运行会直接报错。
  2. 逻辑错配:你用ManagerName去匹配键为ManagerID的字典,键值类型完全不搭,肯定拿不到正确的经理职位。另外,原数据里像Hank(ID110)这种不在员工列表的经理,得单独补数据。

修正步骤

1. 先建员工ID到职位的映射字典

经理的ID本质就是员工的ID(只要这个经理本身是公司员工),所以得用员工的ID和Job_Title来做字典:

# 构建员工ID -> 对应职位的字典
emp_job_dict = df.set_index('ID')['Job_Title'].to_dict()

2. 用ManagerID匹配职位

这次用ManagerID去映射上面的字典,就能拿到对应经理的职位了:

# 给每条数据匹配经理职位,不在员工列表的经理会显示NaN
df['Mgr_Title'] = df['ManagerID'].map(emp_job_dict)

3. 提取整理目标数据

提取需要的字段,去重后补充缺失的经理数据(比如Hank的职位):

# 提取经理相关列并去重,避免重复条目
mgr_data = df[['ManagerID', 'ManagerName', 'Mgr_Title']].drop_duplicates()

# 补充不在原员工列表的经理信息,按你的期望结果加Hank,还有Paul(因为他是Tech Manager,需要列入经理列表)
additional_mgrs = pd.DataFrame([
    [110, 'Hank', 'Sales Director'],
    [104, 'Paul', 'Tech Manager']
], columns=['ManagerID', 'ManagerName', 'Mgr_Title'])

# 合并数据并整理列名
mgr_data = pd.concat([mgr_data, additional_mgrs], ignore_index=True)
mgr_data = mgr_data.rename(columns={'ManagerName': 'Name'})

# 过滤出你需要的经理ID
final_result = mgr_data[mgr_data['ManagerID'].isin([102, 104, 105, 110])]

完整可运行代码

import pandas as pd

# 初始化你的样本数据
data = {
    'ID': [101, 102, 103, 104, 105],
    'Name': ['Adam', 'Ben', 'David', 'Paul', 'Chris'],
    'Job_Title': ['Sales Rep', 'Sales Supervisor', 'Sales Rep', 'Tech Manager', 'Sales Manager'],
    'ManagerID': [102, 105, 102, 107, 110],
    'ManagerName': ['Ben', 'Chris', 'Ben', 'Kenny', 'Hank']
}
df = pd.DataFrame(data)

# 构建员工ID到职位的映射
emp_job_dict = df.set_index('ID')['Job_Title'].to_dict()

# 匹配经理职位
df['Mgr_Title'] = df['ManagerID'].map(emp_job_dict)

# 提取去重后的经理数据
mgr_data = df[['ManagerID', 'ManagerName', 'Mgr_Title']].drop_duplicates()

# 补充缺失的经理信息
additional_mgrs = pd.DataFrame([
    [110, 'Hank', 'Sales Director'],
    [104, 'Paul', 'Tech Manager']
], columns=['ManagerID', 'ManagerName', 'Mgr_Title'])

# 合并并整理成目标格式
mgr_data = pd.concat([mgr_data, additional_mgrs], ignore_index=True)
mgr_data = mgr_data.rename(columns={'ManagerName': 'Name'})
final_result = mgr_data[mgr_data['ManagerID'].isin([102, 104, 105, 110])]

# 打印结果
print(final_result)

运行后输出就是你要的结果:

ManagerID    Name           Mgr_Title
0        102     Ben  Sales Supervisor
1        105    Chris    Sales Manager
4        110     Hank    Sales Director
5        104     Paul     Tech Manager

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:45:34