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

时间:2017-08-18 19:30:19

标签: python pandas dataframe 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

第4列中的排名对每个用户(第1列)是独立的。对于每个用户,我想根据第3列的值对第二列进行排名。例如。对于用户A,他/她有三个职位是排名。因为'编辑'的时间价值是最小的,编辑下一个并提供最大的,三个的排名是编辑 - 1,打印 - 2和交付-3。

我知道我应该从第一列的groupby开始,但不知何故无法计算如何根据每行的第3列对第2列进行排名。

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