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

如何在pandas的groupby中使用mode?报错问题求助

解决Pandas GroupBy中Mode的调用问题

问题背景

在Pandas中对dropoff_site分组后,调用mean()和median()可以正常计算:

newdf.groupby('dropoff_site')['load_weight'].mean()
newdf.groupby('dropoff_site')['load_weight'].median()

但直接调用mode()会报错:'SeriesGroupBy' object has no attribute 'mode';改用agg(pd.Series.mode)后,又因数据存在多众数出现Must produce aggregated value错误。

原因分析

  • SeriesGroupBy对象没有内置的mode()方法,必须通过agg()聚合函数调用pd.Series.mode。
  • 当分组内存在多个众数时,pd.Series.mode会返回一个包含所有众数的Series,而agg()默认期望每个分组返回单个值,因此触发报错。

解决方案

方案1:取每个分组的第一个众数

如果只需要每个分组的任意一个众数(比如第一个),可以用lambda函数提取结果的第一个元素:

newdf.groupby('dropoff_site')['load_weight'].agg(lambda x: x.mode().iloc[0])

方案2:保留所有众数(以列表形式返回)

如果需要保留分组内的所有众数,将结果转为列表即可满足agg()的聚合要求:

newdf.groupby('dropoff_site')['load_weight'].agg(lambda x: x.mode().tolist())

返回结果中,每个分组对应一个包含所有众数的列表。

方案3:自定义聚合规则

如果需要更灵活的处理(比如返回众数的数量、或特定条件的众数),可以自定义聚合函数:

def get_mode(x):
    modes = x.mode()
    # 示例:如果有多个众数,返回最小的那个;否则返回唯一众数
    if len(modes) > 1:
        return min(modes)
    return modes.iloc[0]

newdf.groupby('dropoff_site')['load_weight'].agg(get_mode)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 16:45:37