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

如何在pandas GroupBy agg中给内置函数传参以避免使用lambda

你可以通过给agg传入带参数的内置方法调用实现需求,pandas原生支持该用法,无需引入lambda或自定义函数,运行效率和直接调用内置聚合函数一致。

前置注意事项

在计算前请先确保数据集已经按交易日期排序,避免取到错误的位置:

# 按用户+交易日期升序排序,保证顺序正确
df = df.sort_values(['user_id', 'order_date']).reset_index(drop=True)

实现代码

写法1:直接传入参数(无需额外导入)

pandas支持在agg的聚合规则位置传入(方法名, 位置参数)的元组,自动将参数传递给对应内置方法:

res = df.groupby('user_id').agg(
    # 交易笔数:直接用内置size方法
    count=('user_id', 'size'),
    # 倒数第二笔日期:给nth方法传入负索引n=-2,对应倒数第二个元素
    last2date=('order_date', ('nth', -2)),
    # 平均交易金额:直接用内置mean方法,默认跳过空值
    avgprice=('item_price', 'mean')
).reset_index()

写法2:用functools.partial绑定参数

如果需要传入关键字参数,也可以用partial预绑定方法参数:

from functools import partial

res = df.groupby('user_id').agg(
    count=('user_id', 'size'),
    last2date=('order_date', partial(pd.core.groupby.GroupBy.nth, n=-2, dropna='any')),
    avgprice=('item_price', 'mean')
).reset_index()

补充说明

  • 如果部分用户的交易笔数不足2笔,nth(-2)会自动返回NaN,你可以根据需求后续调用dropna过滤这类记录。
  • 你提到的tail方法也可以用同样的逻辑传参,比如要取每组倒数第2到最后一条记录,传入('tail', 2)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:15:05