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

在Pandas中获取分组max()/min()且不忽略NaN值的方法

分组计算含NaN列的最大值(不忽略NaN)

先给出示例数据:

import pandas as pd
import numpy as np

df = pd.DataFrame({'group' : [1, 2, 2], 'x' : [1, 2, 3], 'y' : [2, 3, np.nan]})

单独计算列y的最大值且不忽略NaN时,执行df.y.max(skipna=False)可得到预期结果nan,但分组后调用df.groupby('group').y.max(skipna=False)会报错TypeError: max() got an unexpected keyword argument 'skipna',因为DataFrameGroupBy.max()不支持skipna参数,可通过以下两种方法实现需求:

方法1:使用agg()结合lambda函数

通过groupby.agg()自定义聚合逻辑,直接调用Series原生的max()方法并传入skipna=False:

df.groupby('group')['y'].agg(lambda s: s.max(skipna=False))

执行结果:

group
1    2.0
2    NaN
Name: y, dtype: float64

方法2:使用apply()方法

对每个分组应用Series的max()方法:

df.groupby('group')['y'].apply(lambda s: s.max(skipna=False))

返回结果与方法1完全一致。

说明

上述两种方法均绕过分组默认的max()实现,直接调用支持skipna参数的Series原生方法。若分组内的y列存在NaN,结果返回NaN;仅当分组内所有y值均非空时,返回实际最大值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:45:57