Python pandas 基于每个输入不同的另一列进行排名/排序

Gra*_*ce 2 python dataframe pandas pandas-groupby

我想根据前三列提出下面的第四列:

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
Run Code Online (Sandbox Code Playgroud)

第 4 列中的排名对于每个用户而言是独立的(第 1 列)。对于每个用户,我想根据第三列的值对第二列进行排名。例如。对于用户A,他/她有3个职位需要排名。由于“编辑”的时间值最小,编辑次之,投递最大,所以三者的排名是编辑-1,打印-2,投递-3。

我知道我应该从第一列开始,但不知何故无法弄清楚如何根据每行不同的第三列对第二列进行排名。

ayh*_*han 5

首先,分配一个新列,其中包含用户-作业对的最短时间:

df['min_time'] = df.groupby(['user', 'job'])['time'].transform('min')
Run Code Online (Sandbox Code Playgroud)

然后按每个用户分组并对它们进行排名:

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
Run Code Online (Sandbox Code Playgroud)