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

在Pandas分组中使用Sklearn指标时解决AttributeError问题

解决Groupby结合MSE计算均方误差的报错问题

原始DataFrame结构

A           B         type        month model forecast_value actual_value
0  71022         ETF      backtest        4   Arima   10              11
1  71022         ETF      backtest        5   Arima   10              11
2  71022         ETF      backtest        4   MA      20              11
3  71023         ADC      backtest        4   Arima   5               10
4  71024         DAC      backtest        4   Arima   8               20
...

报错信息

AttributeError: 'Series' object has no attribute 'actual_value'

错误原因

你使用agg时,lambda的参数x是单个列的Series对象,而非整个分组的DataFrame,因此无法通过x.actual_value访问另一列的数据。agg是针对每一列单独处理的,而计算MSE需要同时用到forecast_value和actual_value两列,所以直接用agg的lambda方式行不通。

解决方案

方法1:使用groupby.apply(兼容sklearn的MSE)

apply会把整个分组的DataFrame传入函数,可直接访问两列计算MSE:

from sklearn.metrics import mean_squared_error

def compute_mse(group):
    return mean_squared_error(group['actual_value'], group['forecast_value'])

# 计算并整理结果
result = df.groupby(['A', 'B', 'model'], as_index=False).apply(compute_mse)
result = result.rename(columns={0: 'mean_squared_error'}).reset_index(drop=True)

方法2:直接用Pandas运算(更高效)

均方误差本质是(预测值-实际值)²的均值,无需依赖sklearn,直接用Pandas计算更高效:

# 先计算每个样本的误差平方
df['error_squared'] = (df['forecast_value'] - df['actual_value']) ** 2

# 分组取均值并重命名列
result = df.groupby(['A', 'B', 'model'], as_index=False)['error_squared'].mean()
result = result.rename(columns={'error_squared': 'mean_squared_error'})

方法3:用agg的多列匹配方式

也可以在agg中通过索引关联两列计算:

result = df.groupby(['A', 'B', 'model'], as_index=False).agg(
    mean_squared_error=('forecast_value', lambda x: ((x - df.loc[x.index, 'actual_value'])**2).mean())
)

最终输出结果

A     B   model  mean_squared_error
0  71022  ETF  Arima                   2
1  71022  ETF     MA                  81
2  71023  ADC  Arima                  25
3  71024  DAC  Arima                 144
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 08:00:12