Python 确定每天的员工级别

Python 确定每天的员工级别,python,pandas,dictionary,Python,Pandas,Dictionary,我每天都在努力确定员工在组织中的深度。最高级别(CEO)为1级,其直接下属为2级,以此类推 我能够计算w/o日期,但无法计算每天的员工级别。以下是我所做的: import pandas as pd # setup df df = pd.DataFrame({'date': ['3/29/2020', '3/29/2020', '3/29/2020', '3/30/2020', '3/30/2020', '3/30/2020', '3/30/2020'],

我每天都在努力确定员工在组织中的深度。最高级别(CEO)为1级,其直接下属为2级,以此类推

我能够计算w/o日期,但无法计算每天的员工级别。以下是我所做的:

import pandas as pd

# setup df
df = pd.DataFrame({'date': ['3/29/2020', '3/29/2020', '3/29/2020', '3/30/2020', '3/30/2020', '3/30/2020', '3/30/2020'],
                   'empid': [1, 2, 3, 1, 2, 3, 4], 'mgrid': [0, 1, 2, 0, 1, 1, 2]})

# create dictionary
dct = dict(zip(df['empid'].values, df['mgrid'].values))

# function to create employee level
def level(empid):
    top = 1
    while (dct[empid]) != 0:
        top += 1
        empid = dct[empid]
    return top

#apply level
df['level'] = df['empid'].apply(level)


您可以使用groupby并每天通过
dct
dict:

def level(empid, dct):
    top = 1
    while (dct[empid]) != 0:
        top += 1
        empid = dct[empid]
    return top

def dflevel(x):
    dct = dict(zip(x['empid'].values, x['mgrid'].values))
    return x['empid'].apply(level, args=[dct])

df['level'] = df.groupby('date').apply(dflevel).values
正如预期的那样:

        date  empid  mgrid  level
0  3/29/2020      1      0      1
1  3/29/2020      2      1      2
2  3/29/2020      3      2      3
3  3/30/2020      1      0      1
4  3/30/2020      2      1      2
5  3/30/2020      3      1      2
6  3/30/2020      4      2      3

一个新用户提出的问题中出现了一个正确答案。。。祝贺你,还有+1!这可能会有点棘手。我们是先假定数量最少的经理ID始终是顶级员工,还是需要根据数据确定层次结构?@ALollz数量最少的经理ID并不总是顶级员工。需要根据数据确定层次结构。非常感谢!当我运行您提供的代码时,我得到了“TypeError:level()缺少1个必需的位置参数:'dct'”。@pythonnewbie:My bad。我忘记了方括号:
…apply(level,args=dct)
应该是
…apply(level,args=[dct])
。固定的。。。