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

如何对不同列用多函数聚合(含mode函数)?代码报错求解

解决Pandas聚合时使用mode众数函数的下标错误

错误原因

你报错的根源是pd.Series.mode[0]的写法错误:pd.Series.mode是一个函数对象,直接对函数使用[0]下标访问,就会触发'function' object is not subscriptable错误——函数本身不能被下标索引,必须先让它作用于分组后的Series,再对结果取第一个值。

修复方案

方案1:使用lambda函数直接处理

在agg里用lambda对每个分组的PSI列计算众数后取第一个结果:

import pandas as pd

dfwb = dfwb.groupby(['WELL','YEAR','MONTH'])[['GOR','PSI']].agg(
    {'GOR': 'mean', 
     'PSI': lambda x: x.mode()[0]}
)

注意:如果某个分组的PSI列全为空值(NaN),x.mode()会返回空Series,此时[0]会触发索引错误。可以优化为:

import pandas as pd
import numpy as np

dfwb = dfwb.groupby(['WELL','YEAR','MONTH'])[['GOR','PSI']].agg(
    {'GOR': 'mean', 
     'PSI': lambda x: x.mode().iloc[0] if not x.mode().empty else np.nan}
)

方案2:封装自定义函数(可读性更好)

如果需要复用或者逻辑更清晰,可以写一个自定义函数处理众数的提取:

import pandas as pd
import numpy as np

def get_group_mode(series):
    mode_vals = series.mode()
    return mode_vals.iloc[0] if not mode_vals.empty else np.nan

dfwb = dfwb.groupby(['WELL','YEAR','MONTH'])[['GOR','PSI']].agg(
    {'GOR': 'mean', 
     'PSI': get_group_mode}
)

内容的提问来源于stack exchange,提问作者Grha Gandana P

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:01:17