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

如何在Pandas DataFrame的agg方法中传递skipna=False参数?

解决Pandas agg方法传递skipna=False的问题

当你需要在agg中为不同聚合函数统一设置skipna=False时,可以通过以下两种方式实现:

方法一:使用lambda函数指定参数

直接在agg的字典中,用lambda函数调用对应聚合方法并传入skipna=False参数:

import pandas as pd
import numpy as np
df = pd.DataFrame({"A": [1, 2], "B": [np.nan, np.nan], "C": [0, 0]})

# 设置skipna=False后,B列sum结果为NaN(而非默认的0.0)
result = df.agg({
    "A": lambda x: x.sum(skipna=False),
    "B": lambda x: x.sum(skipna=False),
    "C": lambda x: x.max(skipna=False)
})
print(result)

输出结果:

A    3.0
B    NaN
C    0.0
dtype: float64

方法二:封装聚合函数映射(适合动态列场景)

如果你的列是动态生成的,且需要复用带参数的聚合函数,可以先创建一个聚合函数映射字典,再根据需求组合使用:

# 定义带skipna=False的聚合函数映射
agg_with_skipna = {
    "sum": lambda x: x.sum(skipna=False),
    "max": lambda x: x.max(skipna=False),
    "mean": lambda x: x.mean(skipna=False)
}

# 动态指定列与聚合函数的对应关系(可根据业务逻辑动态生成此字典)
agg_spec = {
    "A": agg_with_skipna["sum"],
    "B": agg_with_skipna["sum"],
    "C": agg_with_skipna["max"]
}

result = df.agg(agg_spec)
print(result)

这种方式的优势在于,后续添加新聚合函数或调整参数时,只需修改agg_with_skipna字典即可,无需逐个修改列的聚合逻辑,适配大量动态列的场景。

扩展:groupby后的聚合场景

如果是groupby之后的聚合,用法完全一致,只需将agg方法调用在groupby对象上:

# 示例:添加分组列D
df["D"] = ["X", "X"]
grouped_result = df.groupby("D").agg(agg_spec)
print(grouped_result)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:20:56