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]}")
方案优势
- 查询高效:集合的成员查询时间复杂度为O(1),比字典或列表更高效;
- 易于扩展:新增Job_ID时,只需往对应类型的集合中添加ID即可,无需修改多处代码;
- 避免冲突:通过优先级判断(助理优先于经理,经理优先于普通员工),解决了同一ID被多个字典映射的问题。
内容的提问来源于stack exchange,提问作者That_non_coder
相关产品推荐
相关产品推荐

