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

Pandas Groupby:如何将自定义Lambda条件函数整合到聚合操作中

我懂你的需求啦——已经能通过lambda实现按item-date分组后统计PriceDiff_pct的正负值数量,现在想把这类自定义聚合逻辑和Pandas自带的预构建聚合函数(比如mean、sum、max这类)合并到同一个分组聚合操作里,不用分开多次执行对吧?

其实Pandas的agg()方法本身就支持混合自定义lambda和内置聚合函数,而且写法非常灵活,给你两种常用的整合方式:

方式1:跨多列混合聚合(最常用)

如果需要同时对不同列执行不同的聚合操作(包括自定义和内置),可以直接用键值对+元组的形式传递给agg(),每个键就是最终结果的列名,元组的第一个元素是目标列,第二个是聚合函数(不管是lambda还是内置函数/字符串别名都可以):

# 假设你已经完成item-date分组,得到item_day_group
item_day_agg = item_day_group.agg(
    # 自定义lambda聚合:统计PriceDiff_pct的正负数量
    Pos_Count=('PriceDiff_pct', lambda val: (val > 0).sum()),
    Neg_Count=('PriceDiff_pct', lambda val: (val <= 0).sum()),
    # 内置聚合函数:统计PriceDiff_pct的均值和总和
    PriceDiff_Avg=('PriceDiff_pct', 'mean'),
    PriceDiff_Total=('PriceDiff_pct', 'sum'),
    # 对其他列执行内置聚合(比如Volume列的总和和最大值)
    Total_Volume=('Volume', 'sum'),
    Max_Volume=('Volume', 'max')
).reset_index()

方式2:同一列的多聚合操作

如果只是针对某一列(比如你原来的PriceDiff_pct)同时做自定义和内置聚合,可以把多个聚合规则放在列表里,每个规则用元组(结果列名+聚合函数)表示:

item_day_agg = item_day_group['PriceDiff_pct'].agg(
    [
        ('Pos_Count', lambda val: (val > 0).sum()),
        ('Neg_Count', lambda val: (val <= 0).sum()),
        ('Avg_Pct', 'mean'),
        ('Total_Pct', 'sum')
    ]
).reset_index()

小提示

  • 内置聚合函数既可以用字符串别名(比如'mean'、'sum'),也可以直接用对应的函数(比如np.mean、pd.Series.sum),效果完全一致;
  • 用这种整合方式,你只需要执行一次agg()操作,不需要分开聚合后再用merge合并结果,代码更简洁,执行效率也更高;
  • 如果你的自定义逻辑比较复杂,还可以把lambda抽成单独的函数,比如:
    def count_positive(val):
        return (val > 0).sum()
    
    def count_negative(val):
        return (val <= 0).sum()
    
    item_day_agg = item_day_group.agg(
        Pos_Count=('PriceDiff_pct', count_positive),
        Neg_Count=('PriceDiff_pct', count_negative),
        PriceDiff_Avg=('PriceDiff_pct', 'mean')
    ).reset_index()
    
    这样代码可读性会更好,也方便复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:51:23