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

如何在DataFrameGroupBy.agg中使用sum(min_count=1)且保持原生sum速度?

高效实现分组聚合时的sum(min_count=1)

场景1:所有目标列都需要sum(min_count=1)

直接调用groupby.sum()并传入参数,完全复用原生向量化逻辑,速度和你最初的聚合操作一致:

df.groupby(…).sum(min_count=1)

场景2:部分列用sum(min_count=1),其他列用不同聚合方式

用functools.partial包装原生的pd.Series.sum,指定min_count=1参数,既保留原生函数的性能,又能灵活搭配其他聚合逻辑:

from functools import partial

# 包装出带min_count=1的sum函数
sum_min1 = partial(pd.Series.sum, min_count=1)

# 在agg字典中使用
df.groupby(…).agg({
    "foo": sum_min1,
    "bar": "sum",       # 普通sum
    "baz": "mean"       # 其他聚合操作
})

为什么之前的方法性能差?

  • lambda表达式会触发逐组的Python函数调用,无法利用pandas底层的C优化,导致速度骤降。
  • 直接给agg()传min_count=1时,若agg接收的是字典参数,这些全局kwargs不会传递给每个列的聚合函数,因此不生效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:29