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。
我知道我应该从第一列开始,但不知何故无法弄清楚如何根据每行不同的第三列对第二列进行排名。
首先,分配一个新列,其中包含用户-作业对的最短时间:
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)