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

Python pandas按列唯一值分组筛选最大值对应行的方法

pandas实现按title分组取hours_viewed最大值对应整行

你要的分组后保留数值列最大值所在完整行的需求,用pandas可以通过以下两种常用方法实现,运行结果完全匹配你给出的预期输出。

示例数据构造

先复现你给出的测试数据:

import pandas as pd

df = pd.DataFrame({
    'week': [1, 2, 3, 4, 5, 6],
    'category': ['Eng', 'Eng', 'Non-Eng', 'Non-Eng', 'Eng', 'Eng'],
    'title': ['aaa', 'aaa', 'bbb', 'bbb', 'ccc', 'ccc'],
    'hours_viewed': [100, 95, 105, 100, 80, 115]
})

方法1:groupby + idxmax(推荐,逻辑最严谨)

idxmax()会直接返回每个分组下hours_viewed列最大值对应的原始行索引,通过loc直接筛选对应行即可,是这类需求的最通用实现:

result = df.loc[df.groupby('title')['hours_viewed'].idxmax()]
# 如果需要重置连续行索引可以追加 .reset_index(drop=True)
print(result)

运行输出:

week category title  hours_viewed
0     1      Eng   aaa           100
2     3  Non-Eng   bbb           105
5     6      Eng   ccc           115

方法2:排序 + 去重(写法更直观)

先将全表按hours_viewed降序排序,再按title列去重、仅保留第一条记录(也就是每个title对应的最大值记录),如果需要还原原表的week顺序可以最后追加排序:

result = df.sort_values('hours_viewed', ascending=False) \
           .drop_duplicates(subset='title', keep='first') \
           .sort_values('week') \
           .reset_index(drop=True)

注意:如果同一个title下存在多条hours_viewed取值并列最大的记录,以上两种方法默认保留最早出现的那条记录,符合绝大多数场景的使用需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:51:20