我正在尝试按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
答案 0 :(得分:1)
sort
和groupby
+ 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