You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Pandas中实现分组内多列排名并支持并列

分组内基于多列的并列排名实现方案

核心解决方案

要实现分组内基于多列的并列排名,可在每个分组内部将用于排名的多列组合为可比较的元组,再使用rank()方法并指定method='min'参数来保留并列排名。具体代码如下:

import pandas as pd

df = pd.DataFrame({'row_id':[1,2,3,4,5,6,7,8,9,10],
                   'Group':[1,1,1,1,1,2,2,2,2,2],
                   'Var1':[100,100,100,200,200,300,300,400,400,400],
                   'Var2':[5,5,6,7,8,1,1,2,2,3]})

# 实现分组内多列并列排名
df['Rank'] = df.groupby('Group').apply(
    lambda x: x[['Var1', 'Var2']].apply(tuple, axis=1).rank(method='min', ascending=True)
).reset_index(level=0, drop=True).astype(int)

print(df)

输出结果

运行后将得到符合预期的排名:

row_id  Group  Var1  Var2  Rank
0       1      1   100     5     1
1       2      1   100     5     1
2       3      1   100     6     3
3       4      1   200     7     4
4       5      1   200     8     5
5       6      2   300     1     1
6       7      2   300     1     1
7       8      2   400     2     3
8       9      2   400     2     3
9      10      2   400     3     5

代码说明

  1. 分组处理:通过groupby('Group')将数据按分组拆分,确保每个分组内的排名独立计算。
  2. 多列组合:在每个分组内部,使用apply(tuple, axis=1)将Var1和Var2的每行值组合成元组,相同的数值组合会被识别为同一键。
  3. 并列排名设置:调用rank(method='min'),保证相同元组对应的行获得相同的最小排名;ascending=True指定按数值从小到大排序。
  4. 结果格式化:用reset_index去除分组索引,astype(int)将排名转换为整数类型,匹配预期输出格式。

此前方法失效原因

之前使用cumsum()的方法仅对分组内的行进行累加计数,未识别Var1和Var2的重复组合,导致相同数值的行获得递增排名。本方案通过多列组合+rank方法的参数设置,有效解决了并列排名的识别问题。


内容的提问来源于stack exchange,提问作者Felipe D.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 14:37:33