我想根据前三个提出下面的第四列:
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
第4列中的排名对每个用户(第1列)是独立的。对于每个用户,我想根据第3列的值对第二列进行排名。例如。对于用户A,他/她有三个职位是排名。因为'编辑'的时间价值是最小的,编辑下一个并提供最大的,三个的排名是编辑 - 1,打印 - 2和交付-3。
我知道我应该从第一列的groupby开始,但不知何故无法计算如何根据每行的第3列对第2列进行排名。
答案 0 :(得分:4)
首先,分配一个新列,其中包含用户 - 作业对的最短时间:
df['min_time'] = df.groupby(['user', 'job'])['time'].transform('min')
然后按每个用户分组并对其进行排名:
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
答案 1 :(得分:0)
或者你可以使用
Country Year Count
1 A 1 1
2 A 2 1
3 A 3 0
4 A 4 2
5 B 1 1
6 B 2 0
7 B 3 1