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

Pandas分组聚合后取均值TOP5的语法错误排查与正确写法

聚合后按均值取TOP5的语法错误解决

问题场景

想要从聚合后的均值指标中获取TOP5数据,编写了如下代码:

cohort = ['year','month','maincategory','subcategory'] 
poorresult = stmpoor.groupby(cohort,as_index=False).agg({'resolvetime': ['count','mean'], 'grouptransfers': ['mean']}).apply(lambda x: x.nlargest(5, ('resolvetime','mean'))

运行时抛出错误:

ValueError: keep must be either "first", "last" or "all"

尝试添加keep='all'后修改代码(注释掉报错部分):

poorresult = stmpoor.groupby(cohort,as_index=False).agg({'resolvetime': ['count','mean'], 'grouptransfers': ['mean']})# .apply(lambda x: x.nlargest(5, ('resolvetime','mean'),keep='all'))

又出现错误:

TypeError: Series.nlargest() got multiple values for argument 'keep'

错误原因

  1. 首次代码存在语法错误:apply的lambda表达式末尾缺少右括号
  2. 聚合后的结果是多层列索引的DataFrame,直接使用apply时可能误将操作作用在Series上,导致调用Series.nlargest时参数不匹配(Series.nlargest的参数顺序和DataFrame.nlargest不同,会出现参数多值的问题)

正确写法

根据实际需求,分两种情况处理:

情况1:全局取TOP5(所有聚合结果中按均值排前5)

如果是要在所有聚合后的结果里,直接按resolvetime的均值列取TOP5,不需要用apply,直接对聚合后的DataFrame调用nlargest即可:

cohort = ['year','month','maincategory','subcategory'] 
# 先完成聚合操作
agg_result = stmpoor.groupby(cohort, as_index=False).agg(
    {'resolvetime': ['count','mean'], 'grouptransfers': ['mean']}
)
# 全局筛选TOP5,keep='all'保留所有与第5名均值相同的行
poorresult = agg_result.nlargest(5, ('resolvetime', 'mean'), keep='all')
  • keep='all':保留所有和第5名均值相同的行
  • keep='first':只取前5个(即使有相同值,仅保留最早出现的条目)

情况2:分组内取TOP5(指定分组维度内按均值取前5)

如果需求是按某几个维度分组后,每个分组内部取TOP5(比如按year+month分组,每个月内取maincategory+subcategory的TOP5),可以先完成全维度聚合,再按目标维度分组并调用apply:

cohort = ['year','month','maincategory','subcategory'] 
# 先完成全维度聚合
agg_result = stmpoor.groupby(cohort, as_index=False).agg(
    {'resolvetime': ['count','mean'], 'grouptransfers': ['mean']}
)
# 按year和month分组,每个组内取resolvetime均值TOP5
poorresult = agg_result.groupby(['year','month'], group_keys=False).apply(
    lambda x: x.nlargest(5, ('resolvetime', 'mean'), keep='all')
)

这里group_keys=False可以避免分组键作为额外列添加到结果中,apply的lambda参数x是每个分组的DataFrame,调用DataFrame.nlargest参数匹配正确。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:52:39