Pandas查询列最大值对应行时去除重复行的实现方法
单条结果获取实现方案
当前筛选返回4条完全一致重复行的场景下,可根据实际使用需求选择以下处理方式:
- 适配现有代码的去重处理:在已写好的筛选结果后追加
drop_duplicates()方法,过滤掉内容完全一致的冗余行,仅保留唯一的匹配结果。
对应完整代码:
执行后输出仅包含1行df[['name','score']][df.score == df.score.max()].drop_duplicates()name='a', score=100的结果,默认保留第一次出现的匹配行;如果需要保留最后一次出现的重复行,可传入参数keep='last',即.drop_duplicates(keep='last')。 - 一步实现最高分查询:利用pandas自带的
nlargest方法,按照score列排序直接取排名第一的单行结果,无需手动计算最大值、筛选、去重,逻辑更简洁健壮:
该方法会自动计算score列的最大值,返回排序后排名首位的结果,即便存在多个并列最高分的记录,也会只返回1行,完全匹配需求。df[['name','score']].nlargest(1, 'score') - 轻量化值提取:如果仅需要拿到匹配的name值、不需要返回完整DataFrame结构,可以调用
unique()方法先对匹配的name列做值去重,再取数组中的第一个元素:# 直接返回字符串"a" df[df.score == df.score.max()]['name'].unique()[0] - 索引截取首行结果:如果确定数据集必然存在score等于最大值的记录,也可以直接通过索引截取筛选结果的第一行:
注意该方法健壮性较弱,如果后续数据集中不存在符合筛选条件的记录,会触发索引越界报错。df[['name','score']][df.score == df.score.max()].iloc[0]
内容的提问来源于stack exchange,提问作者nemo92world
相关产品推荐
相关产品推荐

