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

Pandas中groupby.sum()处理inf值返回NaN而非inf的原因咨询

问题:Pandas分组聚合sum返回NaN而非inf的原因

我有如下Pandas DataFrame:
DataFrame示例

其中p_nom_max列包含inf值:

>>> df["p_nom_max"] == np.inf

Generator
DE0 1 nuclear     True
DE0 2 nuclear     True
DE0 3 nuclear    False
Name: p_nom_max, dtype: bool

直接对该列使用.sum()聚合时,结果符合预期为inf:

>>> df["p_nom_max"].sum()

inf

但按"carrier"分组后对p_nom_max列聚合时,标准sum函数返回NaN值,仅用lambda包装的np.sum能得到正确结果:

>>> df.groupby("carrier").agg({"p_nom_max": ["sum", np.sum, lambda x: np.sum(x)]})

p_nom_max
         sum    sum <lambda_0>
carrier
nuclear  NaN    NaN inf

请问为何标准groupby聚合会返回NaN而非inf?


原因解析

这是因为Pandas分组聚合的sum(原生pandas.core.groupby.SeriesGroupBy.sum)和直接调用Series的sum、np.sum的处理逻辑存在差异:

  • Pandas分组的sum默认开启skipna=True,如果分组内同时存在inf和NaN,它会优先返回NaN;而直接调用df["p_nom_max"].sum()时,若数据中NaN不影响inf的优先级,会直接返回inf。
  • np.sum的逻辑更直接:只要输入中存在inf,不管有没有NaN,聚合结果都是inf;用lambda包装np.sum相当于绕开了Pandas分组聚合的默认处理,直接使用NumPy的计算规则。

你可以通过设置skipna=False验证这个逻辑:

df.groupby("carrier").agg({"p_nom_max": lambda x: x.sum(skipna=False)})

此时Pandas的sum会保留inf结果,不再返回NaN。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:37:35