python - 按多列排名并按另一列分组

标签 python pandas

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

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

考虑以下数据框

    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 用您的排名标记每个组。减去每个'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

关于python - 按多列排名并按另一列分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58512429/

相关文章:

python - KNeighborsClassifier .predict() 函数不起作用

python - 在循环中将字典附加到 Pandas 数据框

python - Paramiko scp 从远程机器正则表达式复制

从列表 json.decoder.JSONDecodeError : Expecting value: line 1 column 1 (char 0) 循环时出现 python 错误

Python PyGObject 从 GdkPixbuf.get_pixels() 获取像素

python - Pandas 中的 Groupby 或 Pivot?

python - 自动检测代理设置 linux

python - 如何在 python 中创建一个以随机字母作为键且没有重复项的字典?

python - 如何让 pandas 交叉表来汇总多列的值?

python - 堆积柱