Python中为员工-经理数据集新增下属计数列的问题求助
统计每位经理的下属数量解决方案
问题说明
需要给员工汇报关系数据集新增一列,统计每位经理的下属数量。
现有数据集
ID ManagerID 101 105 102 103 103 105 104 103 105 110
期望输出
ID ManagerID Count 101 105 0 102 103 0 103 105 2 104 103 0 105 110 2
错误代码尝试
df['count'] = df.groupby(['ID'])['ManagerID'].transform('nunique')
解决方案
错误原因
这段代码逻辑完全偏离需求:按ID分组统计ManagerID的唯一值数量,实际是在算每个员工有多少个不同的经理,而不是每个经理有多少下属。
正确实现方式
我们需要统计每个ManagerID对应的下属人数(即有多少员工的ManagerID等于该员工的ID),再映射回原数据集中对应经理的行。
方法一:使用merge
# 统计每个经理的下属数量,整理成ID和Count的对应表 manager_subcount = df['ManagerID'].value_counts().reset_index() manager_subcount.columns = ['ID', 'Count'] # 将统计结果合并到原数据集,非经理的员工Count补0 df = df.merge(manager_subcount, on='ID', how='left').fillna(0) # 转换为整数类型(可选) df['Count'] = df['Count'].astype(int)
方法二:使用map(更简洁)
# 生成{经理ID:下属数}的字典 subcount_map = df['ManagerID'].value_counts().to_dict() # 用员工ID匹配字典,不存在的键返回0 df['Count'] = df['ID'].map(subcount_map).fillna(0).astype(int)
结果验证
执行上述任意代码后,得到的结果与期望输出完全一致。
内容的提问来源于stack exchange,提问作者Coding_Nubie
相关产品推荐
相关产品推荐

