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

pandas groupby取第二大percent值时对应Hour列结果错误如何解决

问题原因

你的代码错误来源于apply回调末尾的.min()调用逻辑:

  • x.nlargest(2, columns='percent')已经正确取出了每个分组内percent排名前2的2行数据
  • 后续直接对这2行调用.min()会逐列计算最小值:percent列的最小值确实是分组内第二大的percent值,但Hour列会直接取这2行里Hour的最小值,不会和第二大percent值做行对齐,因此出现Hour匹配错误。
修正方案

只需要在取到前2大的行后,直接返回第二行的完整数据即可,天然保证同一行的Hour和percent对应:

df = df.groupby(['name','Day'], group_keys=False).apply(
    lambda x: x.nlargest(2, columns='percent').iloc[1]
)

如果需要处理分组内数据不足2行的边界场景,避免索引报错,可以加长度判断:

df = df.groupby(['name','Day'], group_keys=False).apply(
    lambda x: x.nlargest(2, columns='percent').iloc[1] if len(x) >=2 else x.iloc[0]
)

也可以采用先排序再取分组第N行的写法,逻辑更直观:

df = df.sort_values('percent', ascending=False)\
       .groupby(['name','Day'], group_keys=False)\
       .nth(1)\
       .reset_index()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:15:04