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

如何将数据集中员工的主管ID替换为对应最高层级团队负责人ID?

员工团队负责人映射问题

示例数据集

emp_idsup_id
1N/A
21
31
42
52
63
7N/A
87
97
109
1119

需求说明

将每位员工映射到对应的最高层级主管(团队负责人,以sup_id=N/A标识):

  • 员工4-6需映射到1(而非直接上级2或3)
  • 员工8、9、10需映射到7
  • 员工11因上级19不在数据集中,无法关联到团队负责人,保留原sup_id值

原代码问题分析

原递归函数未成功运行,核心问题如下:

  1. 列名不匹配:数据集列名为emp_id/sup_id,但代码中使用employee_id/supervisor_id,导致无法读取数据
  2. 终止条件错误:代码判断supervisor_id != 'NA',但实际数据中团队负责人的sup_id是N/A,递归终止逻辑失效
  3. 返回值逻辑错误:团队负责人应返回自身ID,而非N/A,否则映射结果不符合需求
  4. 无效递归未处理:未判断上级ID是否存在于数据集中,可能导致不必要的递归调用

修正后的代码

import pandas as pd

def map_to_project_lead(employee_df, employee_id):
    # 定位当前员工的行
    emp_row = employee_df[employee_df['emp_id'] == employee_id]
    if emp_row.empty:
        return None
    
    supervisor_id = emp_row['sup_id'].iloc[0]
    
    # 当前员工是团队负责人,返回自身ID
    if supervisor_id == 'N/A':
        return employee_id
    # 上级ID不存在于数据中,返回None
    elif supervisor_id not in employee_df['emp_id'].values:
        return None
    # 递归查找上级的团队负责人
    else:
        return map_to_project_lead(employee_df, supervisor_id)

def map_supervisors_to_project_lead(df):
    result_df = df.copy()
    
    for index, row in result_df.iterrows():
        mapped_lead = map_to_project_lead(df, row['emp_id'])
        # 仅在找到有效团队负责人时更新字段
        if mapped_lead is not None:
            result_df.at[index, 'sup_id'] = mapped_lead
    
    return result_df

测试与输出

运行以下测试代码:

# 构造示例数据
data = {
    'emp_id': [1,2,3,4,5,6,7,8,9,10,11],
    'sup_id': ['N/A',1,1,2,2,3,'N/A',7,7,9,19]
}
df = pd.DataFrame(data)

# 执行映射
result_df = map_supervisors_to_project_lead(df)
print(result_df)

输出结果:

emp_idsup_id
11
21
31
41
51
61
77
87
97
107
1119

关键调整说明

  • 统一列名匹配数据集,确保数据读取正常
  • 修正递归终止逻辑:团队负责人直接返回自身ID,保证映射结果正确
  • 增加上级ID存在性判断,避免无效递归
  • 保留未关联员工的原数据,符合需求要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 01:48:32