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

Pandas如何使用agg获取分组后第一、第二大值及对应索引

解决方案

你之前调用agg做聚合的逻辑,只能为每个分组返回单值统计结果,无法输出单分组下多条记录。要获取每个分组下前N大的val值及对应的原始行索引,直接用分组TopN筛选逻辑实现即可。

最优实现

用pandas内置的nlargest方法实现,代码简洁、运行效率高,适配大数据量场景:

import pandas as pd

# 复现示例源数据
df = pd.DataFrame({
    "id": ["a", "a", "a", "b", "b"],
    "type1": ["main", "main", "main", "second", "second"],
    "val": [3, 5, 4, 80, 90]
})

# 核心计算逻辑
result = (
    df
    .groupby(["id", "type1"], group_keys=False)
    # 取每个分组内val列值最大的前2条记录
    .nlargest(n=2, columns="val")
    .rename(columns={"val": "max"})
    # 将原始行索引转为普通列命名为idxmax
    .reset_index(names="idxmax")
    # 调整列顺序匹配预期输出格式
    [["id", "type1", "max", "idxmax"]]
)

运行代码得到的输出完全匹配预期:

id   type1  max  idxmax
0  a    main    5       1
1  a    main    4       2
2  b  second   90       4
3  b  second   80       3

扩展说明

  • 若需要取前3/前K大的值,直接修改nlargest()的参数n为对应数值即可
  • 若需要取最小的前N个值,将nlargest替换为nsmallest即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:12:17