如何在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
相关产品推荐
相关产品推荐

