我有一个如下的数据集。在该数据集中,有不同颜色的温度计,给定“真实”或参考温度,根据一些测量方法“方法1”和“方法2”,它们测量的差异有多大。
我在计算我需要的两个重要参数时遇到困难,这两个参数是平均绝对误差(MAE)和平均符号误差(MSE)。我想为每个方法使用非NaN值并打印结果。
我能够得到的点,我可以返回一个两列系列的索引和和,但在这种情况下的问题是,我需要除以方法值的数量总和,这取决于有多少NaN的变化一排。我不想仅仅因为有一个NaN就跳过整行。
我的代码:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('default'
data = pd.read_csv('data.txt', index_col=0)
data
data["M1_ABS_Error"]= abs(data["True_Temperature"]-data["Method_1"])
data["M2_ABS_Error"]= abs(data["True_Temperature"]-data["Method_2"])
MAE_Series=data[['Name', 'M1_ABS_Error', 'M2_ABS_Error' ]]
MAE_Series.sum(axis=1, skipna=True)
但是目前的输出是这样的,它没有指定这属于哪种颜色的温度计,我希望它能以一种容易将其与所属颜色联系起来的方式打印出来。此外,正如我提到的,这还没有解释如何除以给定行中的值/方法的数量来解释NaN。:
0 4.94
1 3.03
2 11.88
3 3.28
4 8.14
5 7.80
6 2.76
7 2.71
我会感谢你在这方面的帮助。谢谢
我想我现在明白了,如果这是你想要的,请告诉我
MAE:
df['MAE'] = df[['M1_ABS_Error','M2_ABS_Error']].mean(axis = 1)
df
生产
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
对于MSE(有符号错误)
df["MSE"]= df[['Method_1','Method_2']].mean(axis = 1)- df['True_Temperature']
生产
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
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
本文向大家介绍使用NumPy的绝对偏差和绝对均值偏差,包括了使用NumPy的绝对偏差和绝对均值偏差的使用技巧和注意事项,需要的朋友参考一下 在统计分析中对样本中数据变异性的研究表明,给定数据样本中的值有多分散。计算变异性的两个重要方法是绝对偏差和 均值绝对偏差。 绝对偏差 在这种方法中,我们首先找到给定样本的平均值,然后计算每个值与样本平均值之间的差,称为每个数据样本的绝对偏差值。因此,对于高于平
问题内容: 我有下表。我想根据以下公式计算按每个日期分组的加权平均值。我可以使用一些标准的常规代码来执行此操作,但是假设此数据在pandas数据框中,是否有比通过迭代更简单的方法来实现此目的? 2012年1月1日w_avg = 0.5 (60 / sum(60,80,100))+ .75 (80 / sum(60,80,100))+ 1.0 *(100 / sum(60,80,100)) 2012
我是新来的。任何帮助都将不胜感激 这是我的原始数据: 我想得到的是: 1创建一个新的列调用平均值,以计算每个提要的平均市值。 2求加权平均数。 这是我当前的代码,我得到NaN: 对于加权平均代码: 我得到了一个错误: AttributeError:“Series”对象没有属性“value”
问题内容: 我无法获得熊猫列的平均值或均值。有一个数据框。我在下面尝试的任何事情都没有给我该列的平均值 以下返回几个值,而不是一个: 这样: 问题答案: 如果您只想要列的均值,请选择列(这是一个系列),然后调用:
我不能得到熊猫的平均值或平均值。有一个数据框。下面我尝试的东西都没有给我列的平均值 以下内容返回多个值,而不是一个值: 这也是: