如何修正Pandas代码:为代任空缺经理的记录统一添加(Vacant)
修正Pandas雇佣历史数据集临时代理经理标记方案
原代码问题分析
- 语法错误:
groupby('ID','Reporting_Manager_ID'])参数格式错误,应为列表形式;且列名实际是Emp_ID而非ID。 - 拼写错误:
ne(['Manger_Name'])中Manger_Name少写一个字母a,正确应为Manager_Name。 - 逻辑偏差:原代码通过组内第一个经理名与当前名对比来标记,无法精准识别"特定经理代任其他职位"的场景,导致部分目标记录未被标记(如示例中Emp_ID=3的第三条John Wick记录)。
针对性解决方案(仅处理John Wick场景)
根据需求,我们只需标记John Wick在非原始经理ID(4012)下的所有记录,直接通过精准条件筛选即可:
# 定义目标经理及其原始ID target_manager = "John Wick" original_id = 4012 # 生成筛选掩码:经理名为John Wick,且对应经理ID不是原始ID mask = (df['Manager_Name'] == target_manager) & (df['Reporting_Manager_ID'] != original_id) # 给符合条件的记录添加标记 df.loc[mask, 'Manager_Name'] += ' (Vacant)'
运行上述代码后,将得到你期望的输出:所有John Wick在2812、9236、1293等非4012 ID下的记录都会被标记(Vacant),而4012 ID下的记录保持原样。
通用解决方案(支持批量处理多个经理)
如果数据集中有多个经理存在代任情况,可先建立「经理名-原始ID」的映射字典,批量处理所有符合条件的记录:
# 构建经理与原始ID的映射表 manager_original_map = { "John Wick": 4012, "Sarah Smith": 2812, # 可继续添加其他经理的映射关系 } # 生成掩码:当前记录的经理ID不等于该经理的原始ID mask = df.apply( lambda row: row['Reporting_Manager_ID'] != manager_original_map.get(row['Manager_Name'], row['Reporting_Manager_ID']), axis=1 ) # 批量添加标记 df.loc[mask, 'Manager_Name'] += ' (Vacant)'
此方案可适配300+个经理ID的场景,无需逐个编写条件。
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

