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
相关产品推荐
相关产品推荐

