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

Python中基于Job_ID自动生成Emp_Type列的最优实现方案

基于Job_ID自动分类员工类型的最优实现方案

需求:现有包含ID、Job_Title、Job_ID字段的数据集,需基于Job_ID创建新列Emp_Type,区分经理(M)、普通员工(E)、助理(A)。

输入示例

ID      Job_Title          Job_ID 
101     Sales Supervisor   10110
102     Sales Rep          10111
103     Support Manger     10112
103     Tech Support       10113
104     Tech Consultant    10114
105     Consulting Assist. 10115

期望输出

ID      Job_Title          Job_ID     Emp_Type
101    Sales Supervisor    10110         M
102    Sales Rep           10111         E
103    Support Manager     10112         M
104    Tech Support        10113         E
105    Tech Consultant     10114         E
106    Consulting Assist.  10115         A

最初尝试的问题

最初使用字典映射的方式,但新增Job_ID时需要手动维护多个字典,还容易出现ID重复映射的冲突:

manager_dict = {(10110,10112):'M'}
emp_dict = {(10111, 10113,10115): 'E'}
assist_dict ={10115:'A'}

最优实现方案

采用集合存储+优先级判断的方式,既保证查询效率,又方便后续扩展:

方案1:Pandas 处理(推荐,适合数据集场景)

import pandas as pd

# 定义各类型对应的Job_ID集合
manager_job_ids = {10110, 10112}
assistant_job_ids = {10115}

# 定义分类函数,注意优先级:助理 > 经理 > 普通员工
def classify_emp_type(job_id):
    if job_id in assistant_job_ids:
        return 'A'
    elif job_id in manager_job_ids:
        return 'M'
    else:
        return 'E'

# 读取数据集(示例)
df = pd.DataFrame({
    'ID': [101, 102, 103, 103, 104, 105],
    'Job_Title': ['Sales Supervisor', 'Sales Rep', 'Support Manger', 'Tech Support', 'Tech Consultant', 'Consulting Assist.'],
    'Job_ID': [10110, 10111, 10112, 10113, 10114, 10115]
})

# 生成Emp_Type列
df['Emp_Type'] = df['Job_ID'].apply(classify_emp_type)

# 查看结果
print(df.to_string(index=False))

方案2:纯Python 列表处理

如果不用Pandas,直接处理列表数据:

# 定义各类型Job_ID集合
manager_job_ids = {10110, 10112}
assistant_job_ids = {10115}

# 原始数据列表
data = [
    [101, 'Sales Supervisor', 10110],
    [102, 'Sales Rep', 10111],
    [103, 'Support Manger', 10112],
    [103, 'Tech Support', 10113],
    [104, 'Tech Consultant', 10114],
    [105, 'Consulting Assist.', 10115]
]

# 处理数据,添加Emp_Type列
processed_data = []
for row in data:
    job_id = row[2]
    if job_id in assistant_job_ids:
        emp_type = 'A'
    elif job_id in manager_job_ids:
        emp_type = 'M'
    else:
        emp_type = 'E'
    processed_data.append(row + [emp_type])

# 打印结果
print("ID      Job_Title          Job_ID     Emp_Type")
for row in processed_data:
    print(f"{row[0]:<6} {row[1]:<20} {row[2]:<10} {row[3]}")

方案优势

  1. 查询高效:集合的成员查询时间复杂度为O(1),比字典或列表更高效;
  2. 易于扩展:新增Job_ID时,只需往对应类型的集合中添加ID即可,无需修改多处代码;
  3. 避免冲突:通过优先级判断(助理优先于经理,经理优先于普通员工),解决了同一ID被多个字典映射的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 21:34:52