簡體   English   中英

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

[英]Rank by multiple columns grouping by another column

我正在嘗試根據 2 個不同列的值按鍵列對 dataframe 分組進行排名。

每行代表具有給定鍵的路線。 不同的路由可以共享相同的密鑰。 每條路線都有多次接觸和總時間。 如果觸摸相同,我想按觸摸和總時間排名。

考慮以下 dataframe

    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

sortgroupby + ngroup到 label 每個組與您的排名。 減去每個'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

Output:

  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM