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

为何pandas.Series.apply结合np.sum无法作用于整个Series?

Series.apply结合np.sum无法实现聚合的原因

先看示例DataFrame:

>>> df
     a     b
0  aaa  22.0
1   bb  33.0
2    4  44.0
3    6  11.0

想要对列b求和,已知np.sum(df['b'])可以得到正确结果,但以下两种apply写法无法实现求和:

>>> df['b'].apply(np.sum, axis=0)
0    22.0
1    33.0
2    44.0
3    11.0
Name: b, dtype: float64
>>> df['b'].apply(np.sum)
0    22.0
1    33.0
2    44.0
3    11.0
Name: b, dtype: float64

为什么apply函数结合np.sum无法作用于整个Series?

pandas文档中对Series.apply的描述是:

Invoke function on values of Series.
Can be ufunc (a NumPy function that applies to the entire Series) or a Python function that only works on single values.

这里的描述容易产生误解——NumPy函数在apply中并非直接作用于整个Series,而是逐个作用于每个单元格。

具体原因:

  • Series.apply的核心逻辑是遍历Series的每一个元素,将函数分别应用到单个元素上,再把结果组合成新的Series返回。
  • np.sum虽然是能处理数组的ufunc,但当它接收单个数值(比如22.0)作为输入时,会直接返回该数值本身。所以用apply调用np.sum时,本质是给每个元素单独执行np.sum(22.0)、np.sum(33.0),结果自然就是原元素的原样输出,无法实现整个Series的聚合求和。

总结:
如果要对Series做聚合求和,直接使用df['b'].sum()或者np.sum(df['b'])即可;apply的设计初衷是处理逐元素的自定义操作,而非全局聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 12:25:31