如何使用pandas/numpy/python数学库计算平均绝对误差(MAE)和平均符号误差(MSE)?

如何使用pandas/numpy/python数学库计算平均绝对误差(MAE)和平均符号误差(MSE)?,python,pandas,numpy,math,statistics,Python,Pandas,Numpy,Math,Statistics,我有一个如下的数据集。在该数据集中,有不同颜色的温度计,给定“真实”或参考温度,根据一些测量方法“方法1”和“方法2”,它们测量的差异有多大 我在计算我需要的两个重要参数时遇到困难,它们是平均绝对误差(MAE)和平均符号误差(MSE)。我想为每个方法使用非NaN值并打印结果 我能够得到一个点,在这个点上,我可以返回一个索引和求和的两列序列,但在这个例子中的问题是,我需要除以求和的方法值的数量,它的变化取决于一行中有多少个NaN。我不想仅仅因为有一个NaN就跳过整行 数 日期 温度计 真实温度 方

我有一个如下的数据集。在该数据集中,有不同颜色的温度计,给定“真实”或参考温度,根据一些测量方法“方法1”和“方法2”,它们测量的差异有多大

我在计算我需要的两个重要参数时遇到困难,它们是平均绝对误差(MAE)和平均符号误差(MSE)。我想为每个方法使用非NaN值并打印结果

我能够得到一个点,在这个点上,我可以返回一个索引和求和的两列序列,但在这个例子中的问题是,我需要除以求和的方法值的数量,它的变化取决于一行中有多少个NaN。我不想仅仅因为有一个NaN就跳过整行

数 日期 温度计 真实温度 方法1 方法2 0 1/1/2021 红色 0.2 0.2 0.5 1. 1/1/2021 红色 0.6 0.6 0.3 2. 1/1/2021 红色 0.4 0.6 0.23 3. 1/1/2021 绿色 0.2 0.4 楠 4. 1/1/2021 绿色 1. 1. 0.23 5. 1/1/2021 黄色的 0.4 0.4 0.32 6. 1/1/2021 黄色的 0.1 楠 0.4 7. 1/1/2021 黄色的 1.3 0.5 0.54 8. 1/1/2021 黄色的 1.5 0.5 0.43 9 1/1/2021 黄色的 1.5 0.5 0.43 10 1/1/2021 蓝色 0.4 0.3 楠 11 1/1/2021 蓝色 0.8 0.2 0.11 编辑 我想我现在明白了,如果这是你想要的,请告诉我

MAE:

产生


    date      Thermometer      True_Temperature    Method_1    Method_2    M1_ABS_Error    M2_ABS_Error    MAE
--  --------  -------------  ------------------  ----------  ----------  --------------  --------------  -----
 0  1/1/2021  red                           0.2         0.2        0.5              0              0.3   0.15
 1  1/1/2021  red                           0.6         0.6        0.3              0              0.3   0.15
 2  1/1/2021  red                           0.4         0.6        0.23             0.2            0.17  0.185
 3  1/1/2021  green                         0.2         0.4      nan                0.2          nan     0.2
 4  1/1/2021  green                         1           1          0.23             0              0.77  0.385
 5  1/1/2021  yellow                        0.4         0.4        0.32             0              0.08  0.04
 6  1/1/2021  yellow                        0.1       nan          0.4            nan              0.3   0.3
 7  1/1/2021  yellow                        1.3         0.5        0.54             0.8            0.76  0.78
 8  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035
 9  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035
10  1/1/2021  blue                          0.4         0.3      nan                0.1          nan     0.1
11  1/1/2021  blue                          0.8         0.2        0.11             0.6            0.69  0.645
    date      Thermometer      True_Temperature    Method_1    Method_2    M1_ABS_Error    M2_ABS_Error    MAE     MSE
--  --------  -------------  ------------------  ----------  ----------  --------------  --------------  -----  ------
 0  1/1/2021  red                           0.2         0.2        0.5              0              0.3   0.15    0.15
 1  1/1/2021  red                           0.6         0.6        0.3              0              0.3   0.15   -0.15
 2  1/1/2021  red                           0.4         0.6        0.23             0.2            0.17  0.185   0.015
 3  1/1/2021  green                         0.2         0.4      nan                0.2          nan     0.2     0.2
 4  1/1/2021  green                         1           1          0.23             0              0.77  0.385  -0.385
 5  1/1/2021  yellow                        0.4         0.4        0.32             0              0.08  0.04   -0.04
 6  1/1/2021  yellow                        0.1       nan          0.4            nan              0.3   0.3     0.3
 7  1/1/2021  yellow                        1.3         0.5        0.54             0.8            0.76  0.78   -0.78
 8  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035  -1.035
 9  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035  -1.035
10  1/1/2021  blue                          0.4         0.3      nan                0.1          nan     0.1    -0.1
11  1/1/2021  blue                          0.8         0.2        0.11             0.6            0.69  0.645  -0.645
对于MSE(有符号错误)

产生


    date      Thermometer      True_Temperature    Method_1    Method_2    M1_ABS_Error    M2_ABS_Error    MAE
--  --------  -------------  ------------------  ----------  ----------  --------------  --------------  -----
 0  1/1/2021  red                           0.2         0.2        0.5              0              0.3   0.15
 1  1/1/2021  red                           0.6         0.6        0.3              0              0.3   0.15
 2  1/1/2021  red                           0.4         0.6        0.23             0.2            0.17  0.185
 3  1/1/2021  green                         0.2         0.4      nan                0.2          nan     0.2
 4  1/1/2021  green                         1           1          0.23             0              0.77  0.385
 5  1/1/2021  yellow                        0.4         0.4        0.32             0              0.08  0.04
 6  1/1/2021  yellow                        0.1       nan          0.4            nan              0.3   0.3
 7  1/1/2021  yellow                        1.3         0.5        0.54             0.8            0.76  0.78
 8  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035
 9  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035
10  1/1/2021  blue                          0.4         0.3      nan                0.1          nan     0.1
11  1/1/2021  blue                          0.8         0.2        0.11             0.6            0.69  0.645
    date      Thermometer      True_Temperature    Method_1    Method_2    M1_ABS_Error    M2_ABS_Error    MAE     MSE
--  --------  -------------  ------------------  ----------  ----------  --------------  --------------  -----  ------
 0  1/1/2021  red                           0.2         0.2        0.5              0              0.3   0.15    0.15
 1  1/1/2021  red                           0.6         0.6        0.3              0              0.3   0.15   -0.15
 2  1/1/2021  red                           0.4         0.6        0.23             0.2            0.17  0.185   0.015
 3  1/1/2021  green                         0.2         0.4      nan                0.2          nan     0.2     0.2
 4  1/1/2021  green                         1           1          0.23             0              0.77  0.385  -0.385
 5  1/1/2021  yellow                        0.4         0.4        0.32             0              0.08  0.04   -0.04
 6  1/1/2021  yellow                        0.1       nan          0.4            nan              0.3   0.3     0.3
 7  1/1/2021  yellow                        1.3         0.5        0.54             0.8            0.76  0.78   -0.78
 8  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035  -1.035
 9  1/1/2021  yellow                        1.5         0.5        0.43             1              1.07  1.035  -1.035
10  1/1/2021  blue                          0.4         0.3      nan                0.1          nan     0.1    -0.1
11  1/1/2021  blue                          0.8         0.2        0.11             0.6            0.69  0.645  -0.645
原始答案 现在还不完全清楚你想要什么,但这里有点猜测,这就是你想要的吗?如果您按颜色
groupby
,并将
mean
应用于每个组中的`ABS列

data.groupby('Thermometer', sort = False)[['M1_ABS_Error','M2_ABS_Error']].mean()
你明白了吗


        M1_ABS_Error    M2_ABS_Error
Thermometer     
red     0.066667    0.256667
green   0.100000    0.770000
yellow  0.700000    0.656000
blue    0.350000    0.690000
这里,例如,左上角的第一个数字“0.066667
M1\u ABS\u Error
列中红色温度计的平均值。与其他类似。在每个颜色/列中跳过NAN

要得到MSE(通常意味着均方误差,所以我假设这就是你想要的),你可以这样做

import numpy as np
data["M1_Sqr_Error"]= (data["True_Temperature"]-data["Method_1"])**2
data["M2_Sqr_Error"]= (data["True_Temperature"]-data["Method_2"])**2
data.groupby('Thermometer', sort = False)[['M1_Error','M2_Error']].apply(lambda v: np.sqrt(np.mean(v)))
得到


        M1_Error    M2_Error
Thermometer     
red     0.115470    0.263881
green   0.141421    0.770000
yellow  0.812404    0.769909
blue    0.430116    0.690000

谢谢你的回答!我要找的是平均绝对误差(MAE),它是所有绝对误差的平均值。基本上,你是1。找到你所有的绝对错误,席-X。2.把它们都加起来。3.除以错误数。例如,如果有10个测量值,则除以10。理想情况下,我会通过索引得到每行的MAE值。不仅仅是“全红”,而是每一个单独的红。我遇到的麻烦是如何划分每行的绝对误差和,因为有些“方法”中有NaN。所以在这种情况下,一些可能需要除以2,另一些需要除以1As来表示MSE,我的意思是有符号误差或有符号差@JosephRomo请查看编辑非常感谢!这正是我想要的。非常彻底和清晰的解释。@Piterberg