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

Python pandas 如何按Row Number分组保留每组Rank最高值(含并列)

实现方案

你可以通过分组后匹配每组最大值的方式实现需求,以下是可直接运行的完整代码:

完整代码示例

import pandas as pd

# 构造示例DataFrame
df = pd.DataFrame({
    'Row Number': [702, 702, 702, 100, 100, 100],
    'Rank': [20, 20, 6, 5, 5, 1]
})

# 核心逻辑:按Row Number分组,获取每个分组的Rank最大值,过滤匹配的行
group_max_rank = df.groupby('Row Number')['Rank'].transform('max')
res_df = df[df['Rank'] == group_max_rank].reset_index(drop=True)

print(res_df)

输出结果

Row Number  Rank
0         702    20
1         702    20
2         100     5
3         100     5

逻辑说明

  • groupby('Row Number')['Rank'].transform('max') 会为每一行返回其所在Row Number分组的最高Rank值,返回结果的长度和原DataFrame完全一致,方便直接做布尔过滤
  • 布尔过滤df[df['Rank'] == group_max_rank]会保留所有Rank等于所在分组最高值的行,自动包含并列最高的情况
  • 末尾的reset_index(drop=True)是可选操作,用于重置输出结果的行索引,符合预期输出格式

备选实现方案

如果你更习惯用分组聚合后合并的方式,也可以用下面的写法,效果完全一致:

# 先计算每个分组的最高Rank
group_max = df.groupby('Row Number', as_index=False)['Rank'].max()
# 用两字段匹配合并,自动过滤不符合的行
res_df = pd.merge(df, group_max, on=['Row Number', 'Rank'], how='inner')

内容的提问来源于stack exchange,提问作者datafreak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 01:15:03