Python Pandas统计管理者下属人数报错:无法将多列赋值到单列
问题解决:统计员工下属人数的Pandas实现
错误原因
你写的df.groupby('mgr_id').transform('count')会对数据集中的所有列执行计数操作,返回一个包含emp_id和mgr_id两列的DataFrame。但你试图把这个多列结果赋值给单个列emp_count,这就触发了ValueError——Pandas不允许把多列数据塞进一个列里。
正确解法
我们需要先单独统计每个经理对应的下属数量,再将这个数量映射到每个员工身上,非经理的员工下属数填0。具体代码如下:
# 1. 统计每个经理的下属人数:按mgr_id分组,对emp_id计数 mgr_sub_count = df.groupby('mgr_id')['emp_id'].count() # 2. 把每个员工的emp_id映射到对应的下属数,没有对应值的填0 df['emp_count'] = df['emp_id'].map(mgr_sub_count).fillna(0).astype(int)
代码解释
groupby('mgr_id')['emp_id'].count():只针对emp_id列计数,返回一个Series,索引是经理ID,值是下属人数(比如mgr_id=3对应4个下属)。df['emp_id'].map(mgr_sub_count):把每个员工的ID和经理ID匹配,找到对应的下属数;如果某个员工不是经理(比如emp_id=1),map会返回NaN。fillna(0):把NaN替换成0,符合非经理员工下属数为0的需求。astype(int):把结果转成整数类型,和预期输出一致。
运行后就能得到你想要的结果:
emp_id mgr_id emp_count 0 1 3 0 1 2 3 0 2 3 5 4 3 4 3 0 4 5 7 1 5 6 7 0 6 7 10 3 7 8 3 0 8 9 7 0 9 10 - 1
内容的提问来源于stack exchange,提问作者That_non_coder
相关产品推荐
相关产品推荐

