Clasificación / clasificación de los pandas de Python basada en otra columna que difiere para cada entrada

Me gustaría llegar a la cuarta columna a continuación basada en los tres primeros:

user job time Rank A print 1559 2 A print 1540 2 A edit 1520 1 A edit 1523 1 A deliver 9717 3 B edit 1717 2 B edit 1716 2 B edit 1715 2 B deliver 1527 1 B deliver 1524 1 

La clasificación en las 4as columnas es independiente para cada usuario (1ra columna). Para cada usuario, me gustaría clasificar la segunda columna según el valor de la tercera columna. P.ej. para el usuario A, él / ella tiene tres trabajos para ser clasificado. Debido a que el valor de tiempo de ‘editar’ es el más pequeño y el siguiente y el más grande, el ranking para los tres es editar – 1, imprimir – 2 y entregar -3.

Sé que debería comenzar con el grupo por la primera columna, pero de alguna manera no puedo entender cómo clasificar la segunda columna según la tercera, que es diferente para cada fila.

Primero, asigne una nueva columna que contenga el tiempo mínimo para los pares de usuario-trabajo:

 df['min_time'] = df.groupby(['user', 'job'])['time'].transform('min') 

Luego agrupa por cada usuario y clasifícalos:

 df.groupby('user')['min_time'].rank(method='dense').astype(int) Out: 0 2 1 2 2 1 3 1 4 3 5 2 6 2 7 2 8 1 9 1 Name: min_time, dtype: int64 

O puedes usar

 df1=df1.sort_values(['user','time'],ascending=[True,True]) df1['Rank']=df1.job!=df1.job.shift().fillna('edit') df1.Rank=df1.groupby('user').Rank.cumsum()+1 user job time Rank 0 A print 1559 2.0 1 A print 1540 2.0 2 A edit 1520 1.0 3 A edit 1523 1.0 4 A deliver 9717 3.0 5 B edit 1717 2.0 6 B edit 1716 2.0 7 B edit 1715 2.0 8 B deliver 1527 1.0 9 B deliver 1524 1.0