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

Pandas:DataFrameGroupBy调用agg()时函数参数的疑问

分组聚合中Lambda参数类型的问题解析

我有一个名为reviews的DataFrame,包含variety和price字段,想要统计每个variety对应的最高、最低价格。

以下代码可以正常运行:

reviews.groupby('variety').price.agg([max, min])

但这段代码却报错:

reviews.groupby('variety').agg([ lambda df: df.price.max(), lambda df: df.price.min() ])

报错信息显示Series类型没有price属性,我原本以为lambda会接收整个分组的DataFrame作为参数,这是怎么回事?


问题根源

核心差异在于分组后是否指定列,决定了agg传入函数的参数类型:

  • 当你写reviews.groupby('variety').price.agg(...)时,.price已经把分组结果限定为price列的Series,agg里的函数(比如max)接收的是每个分组的Series,直接调用方法就能得到结果。
  • 而直接调用reviews.groupby('variety').agg(...)时,若传入的是未绑定列的lambda列表,agg会默认对每一列单独应用这些lambda。也就是说,此时lambda接收的不是整个分组的DataFrame,而是每个分组里的单个Series(先处理variety列的Series,再处理price列的Series)。当处理variety列时,调用df.price自然会报错——因为Series没有price这个属性。

修正方法

如果一定要用lambda处理整个分组的DataFrame,需要用字典明确指定函数对应的列:

reviews.groupby('variety').agg({'price': [lambda df: df.max(), lambda df: df.min()]})

不过其实这种场景下直接用第一种写法更简洁,没必要额外用lambda。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:55:19