Python 数据帧:在一列上使用 Groupby 计算 R^2 和 RMSE

Python Dataframe: Calculating R^2 and RMSE Using Groupby on One Column

提问人:PineNuts0 提问时间:12/21/2017 最后编辑:Mark LoymanPineNuts0 更新时间:7/18/2022 访问量:13767

问:

我有以下 Python 数据帧:

Type    Actual  Predicted
A       4       3
A       10      18
A       13      11
B       3       10
B       4       2
B       8       33
C       20      17
C       40      33
C       87      80
C       32      30

我有计算 R^2 和 RMSE 的代码,但我不知道如何通过不同的“类型”来计算它。

目前,我的方法是将较大的表分解为三个仅由 A、B、C 值组成的较小表,然后从每个较小的表中计算 R^2 和 RMSE......然后将它们重新加在一起。

但是上面的方法效率低下,我相信应该有更简单的方法吗?

以下是我希望在对事物进行分组时产生的结果的格式:

Type    R^2     RMSE    
A       value   value   
B       value   value   
C       value   value   
python 数据帧 pandas-group作者

评论

0赞 usernamenotfound 12/21/2017
执行 GroupBy 并将公式作为函数应用于整个列
0赞 MattR 12/21/2017
你介意给我们你拥有的 r^2 和 RMSE 公式,以便我们测试一下吗?我(也许还有其他人)的统计课已经有一段时间了

答:

38赞 Tom 12/21/2017 #1

下面是一个方法:groupby

import numpy as np
import pandas as pd
from sklearn.metrics import r2_score, mean_squared_error

def r2_rmse(g):
    r2 = r2_score(g['Actual'], g['Predicted'])
    rmse = np.sqrt(mean_squared_error(g['Actual'], g['Predicted']))
    return pd.Series(dict(r2 = r2, rmse = rmse))

your_df.groupby('Type').apply(r2_rmse).reset_index()

评论

0赞 PineNuts0 12/21/2017
这太神奇了!谢谢。。。。关于如何在置信区间内执行此操作的任何提示?
2赞 Abhilash Awasthi 8/24/2020
return语句可以修改为return pd.Series({'r2':r2, 'rmse':rmse})