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

如何在Pandas聚合中同时使用mean与nth(0)方法?

Pandas聚合时同时使用mean和nth函数的正确实现

原始代码与报错

以下是初始尝试的聚合代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'a' : [1,1,1,1],
    'b' : [1,2,3,4],
    'c' : [np.nan,6,7,8],
})

r = df.groupby('a').agg({
    'b' : 'mean',
    'c' : 'nth(0)',
})

运行后触发报错:

AttributeError: 'SeriesGroupBy' object has no attribute 'nth(0)'

需求说明

原本想使用first方法,但它会自动返回第一个非空值,实际需要保留分组后列c的第一个原始值(包括空值),同时对列b计算均值。

已知以下写法可行,但不够优雅:

df.groupby('a').agg({
    'b' : 'mean',
    'c' : lambda s:s.iloc[0],
})

优雅解决方案

可以通过两种符合Pandas语法规范的方式实现:

方式1:元组形式指定函数与参数

这是最简洁的写法,直接用元组传递聚合函数名和对应参数:

df.groupby('a').agg({
    'b': 'mean',
    'c': ('nth', 0)
})

方式2:用functools.partial绑定参数

如果需要更灵活的参数控制,可借助partial绑定函数参数:

from functools import partial

df.groupby('a').agg({
    'b': 'mean',
    'c': partial(pd.Series.nth, n=0)
})

效果验证

两种方式运行后,均得到预期结果:

b   c
a         
1  2.5 NaN

既保留了列c的第一个空值,也正确计算了列b的均值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 16:42:09