Python 按多列排序按另一列分组
我试图根据两个不同列的值,按键列对数据帧分组进行排序 每行代表一条具有给定密钥的路由。不同的路由可以共享同一个密钥。每条路线都有若干接触点和总时间。如果触摸相同,我想按触摸和总时间进行排名 考虑以下数据帧Python 按多列排序按另一列分组,python,pandas,Python,Pandas,我试图根据两个不同列的值,按键列对数据帧分组进行排序 每行代表一条具有给定密钥的路由。不同的路由可以共享同一个密钥。每条路线都有若干接触点和总时间。如果触摸相同,我想按触摸和总时间进行排名 考虑以下数据帧 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
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
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
你想要5作为最后一个等级吗?不,因为键会不同,在这种情况下等级将是1