按多列排序,按另一列分组

时间:2019-10-22 21:16:36

标签: python pandas

我正在尝试按2个不同列的值对按关键字列分组的数据框进行排名。

每一行代表具有给定键的路由。不同的路由可以共享相同的密钥。每条路线都具有触摸次数和总时间。如果接触相同,我想按接触和总时间进行排名。

考虑以下数据框

    route   key touches total_tt
0   R1  key1    1   10
1   R2  key1    2   20
2   R3  key1    2   23
3   R4  key1    3   20
4   R5  key1    3   20
5   R6  key1    3   30
6   R7  key2    3   30

我希望获得以下排名

    route   key touches total_tt    rank
0   R1  key1    1   10  1
1   R2  key1    2   20  2
2   R3  key1    2   23  3
3   R4  key1    3   20  4
4   R5  key1    3   20  4
5   R6  key1    3   30  5
6   R7  key2    3   30  1

1 个答案:

答案 0 :(得分:1)

sortgroupby + ngroup为每个组标记您的排名。减去每个'key'中的最小排名,然后得出组内的期望排名。

cols = ['key', 'touches', 'total_tt']

df['rank'] = df.sort_values(cols).groupby(cols, sort=False).ngroup()
df['rank'] = df['rank'] - df.groupby('key')['rank'].transform('min') + 1

输出:

  route   key  touches  total_tt  rank
0    R1  key1        1        10     1
1    R2  key1        2        20     2
2    R3  key1        2        23     3
3    R4  key1        3        20     4
4    R5  key1        3        20     4
5    R6  key1        3        30     5
6    R7  key2        3        30     1