如何在pandas中按Manager_ID分组统计离职员工数并新增列?
问题原因分析
你直接执行df['term_count'] = df.groupby('Manager_ID')['Termed'].sum()出现NaN的核心原因是:
groupby('Manager_ID')['Termed'].sum()返回的是一个以Manager_ID为索引的Series,长度等于唯一Manager_ID的数量;- 原DataFrame的索引是默认行号(0、1、2...),两者索引不匹配,只有当原DataFrame的行索引恰好等于某个
Manager_ID值时才会赋值成功,其余行都会填充NaN。
另外你的需求是仅经理行显示自己管理的下属离职数,普通员工行显示0,需要针对性调整代码逻辑。
解决代码
# 1. 统计每个经理ID对应的下属离职员工总数 manager_term_counts = df.groupby('Manager_ID')['Termed'].sum() # 2. 用员工ID匹配经理ID的统计结果,匹配到则取离职数,否则填0 df['term_count'] = df['Emp_ID'].map(manager_term_counts).fillna(0).astype(int)
执行后即可得到你期望的输出:
Name Emp_ID Job Manager Manager_ID Termed term_count Adam 100 Sales Steve 103 0 0 Beth 101 Sales Steve 103 0 0 Rick 102 Tech John 106 0 0 Steve 103 Sales Mgr. Lisa 110 0 2 Drake 104 Tech John 106 1 0 Sarah 105 Sales Steve 103 1 0 John 106 Tech Mgr. Rodger 122 0 1 Mike 107 Sales Steve 103 1 0
补充说明
df.groupby('Manager_ID')['Termed'].sum():按经理ID分组,统计每组内离职员工的总数;df['Emp_ID'].map(manager_term_counts):用员工ID匹配经理ID的统计结果,只有当员工是经理(即其ID出现在Manager_ID列表中)时,才会拿到对应的下属离职数;fillna(0).astype(int):将未匹配到的普通员工行填充为0,并转为整数类型,符合输出格式要求。
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

