Python中按条件修改行:给代班经理名称添加(Sub)
问题分析与解决建议
你的代码报错原因
- 语法错误:
- 字符串索引引号不匹配:
df['Manager_pos]缺少闭合单引号,应改为df['Manager_pos'];df['Manager Name')错误使用右括号,应改为df['Manager Name'] - 括号逻辑错误:
&两侧的条件括号包裹不完整,导致运算优先级混乱
- 字符串索引引号不匹配:
- 逻辑错误:
head(1)和tail(1)是针对整个数据集取首尾行,并非按Emp_ID分组判断每个员工的主经理,无法正确识别代班场景
- 格式错误:
- 你需要添加的是
(Sub)后缀,而非直接拼接Sub
- 你需要添加的是
正确实现方案
根据你的期望输出,逻辑应为:按 Emp_ID 分组,每个员工的第一个出现的经理为正式经理,其余经理为代班经理,添加 (Sub) 后缀。以下是可运行代码:
import pandas as pd import numpy as np # 构造示例数据集(替换为你的真实数据) data = { 'Emp_ID': [1,1,1,2,2,2], 'Job_Title': ['Sales','Sales','Sales','Tech','Tech','Tech'], 'Manager_Pos': [627,627,627,324,324,324], 'Manager Name': ['John Doe','John Doe','David Stern','Mark Smith','Henry Ford','Henry Ford'], 'MGR_ID': [12,12,4,7,13,13] } df = pd.DataFrame(data) # 按Emp_ID分组,获取每个员工的第一个经理作为正式经理 main_managers = df.groupby('Emp_ID')['Manager Name'].first().reset_index(name='Main_Manager') # 合并正式经理信息到原数据集 df = df.merge(main_managers, on='Emp_ID') # 给代班经理添加(Sub)后缀 df['Manager Name'] = np.where( df['Manager Name'] != df['Main_Manager'], df['Manager Name'] + '(Sub)', df['Manager Name'] ) # 删除辅助列(可选) df = df.drop('Main_Manager', axis=1) # 输出结果 print(df.to_string(index=False))
输出结果
Emp_ID Job_Title Manager_Pos Manager Name MGR_ID 1 Sales 627 John Doe 12 1 Sales 627 John Doe 12 1 Sales 627 David Stern(Sub) 4 2 Tech 324 Mark Smith 7 2 Tech 324 Henry Ford(Sub) 13 2 Tech 324 Henry Ford(Sub) 13
如果你的实际逻辑是取每个员工出现次数最多的经理作为正式经理,可以将获取主经理的代码替换为:
def get_main_manager(group): return group['Manager Name'].value_counts().idxmax() main_managers = df.groupby('Emp_ID').apply(get_main_manager).reset_index(name='Main_Manager')
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

