pythonnewbie:
Estoy tratando de determinar la profundidad de un empleado en la organización de cada día. El nivel superior (CEO) es el nivel 1, sus subordinados directos son de nivel 2, etc.
Yo era capaz de calcular w / o fecha, pero tiene problemas para calcular el nivel de los empleados para cada día. Esto es lo que he hecho:
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)
Serge Ballesta :
Se puede usar un GroupBy y pasar el dct
dict por día:
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
Da como se esperaba:
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