我有一个如下数据框:
boss_id employee_id designation
-1 100 CEO
100 39 Manager
100 4567 Manager
100 9843 Manager
39 47 entry level
39 45 entry level
4567 8 entry level
9843 9 entry level
在这个boss_id给了员工的老板。指定适用于员工。 我想知道每个人管理的人数。
例如,由于首席执行官是最终的人,他应该管理这个数据框中的所有7个人。经理只管理入门级别。例如,作为经理的员工39管理此数据框中的2个人。最后,入门级别不管理任何人,因此他们的计数应为0。
我想要一个像这样的数据框:
boss_id employee_id designation count
-1 100 CEO 7
100 39 Manager 2
100 4567 Manager 1
100 9843 Manager 1
39 47 entry level 0
39 45 entry level 0
4567 8 entry level 0
9843 9 entry level 0
我无法理解这一点,任何帮助都将不胜感激!提前致谢。
答案 0 :(得分:1)
您可以递归调用employee_ids并查找其计数
def findCount(employee_id):
if df.loc[df['employee_id'] == employee_id]['designation'].as_matrix()[0] == 'd':
return 0
eIds = df.loc[df['boss_id']==employee_id]['employee_id'].as_matrix()
cnt = 0
for eid in eIds:
cnt += (findCount(eid) + 1)
return cnt
for index, row in df.iterrows():
cnt = findCount(row['employee_id'])
df.loc[index, 'count'] = cnt
答案 1 :(得分:0)
执行groups = df.groupby([boss_id])
去小组并获得计数。
`for boss_id, group in groups:
count = len(group)`