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

如何在指定聚合输出列的agg()中实现全NaN时返回NaN

解决方法

要在指定聚合输出列的agg写法中使用min_count=1参数,你可以直接将求和逻辑替换为带参数的pd.Series.sum调用,具体有两种简洁写法:

写法一:使用带参数的函数元组

import pandas as pd
import numpy as np

data = {'Integers': [1, 2, np.nan, 4, 5],
        'AllNaN': [np.nan, np.nan, np.nan, np.nan, np.nan]}
df = pd.DataFrame(data)

agg_df = df.agg(
    SummedInt=('Integers', pd.Series.sum, {'min_count': 1}),
    sumofallNaN=('AllNaN', pd.Series.sum, {'min_count': 1})
).reset_index()

print(agg_df)

输出结果:

index  Integers  AllNaN
0  SummedInt       12.0     NaN
1  sumofallNaN      NaN     NaN

写法二:使用lambda函数封装求和逻辑

agg_df = df.agg(
    SummedInt=('Integers', lambda s: s.sum(min_count=1)),
    sumofallNaN=('AllNaN', lambda s: s.sum(min_count=1))
).reset_index()

两种写法效果完全一致,任选其一即可。

原理说明

默认的'sum'字符串对应的聚合逻辑,对全NaN列会返回0;而pd.Series.sum(min_count=1)要求至少存在1个非NaN值才计算求和,否则返回NaN,正好匹配你的需求。在agg的键值对写法中,值可以是(列名, 聚合函数, 参数字典)的形式,也可以用lambda直接封装带参数的函数调用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 04:59:53