我有两个数据框,每个数据框表示实际降雨和预测降雨情况。实际降雨数据帧是恒定的,因为它是已知结果。预测降雨数据框它们在下面给出。
actul =
index rain
Day1 True
Day2 False
Day3 True
Day4 True
下面给出了预测的降雨数据框。该数据框根据所使用的预测模型不断变化。
prdt =
index rain
Day1 False
Day2 True
Day3 True
Day4 False
我正在开发上述预测模型的预测精度,如下所示:
#Following computes the number days on which raining was predicted correctly
a = sum(np.where(((actul['rain'] == True)&(prdt['rain']==True)),True,False))
#Following computes the number days on which no-rain was predicted correctly
b = sum(np.where(((actul['rain'] == False)&(prdt['rain']==False)),True,False))
#Following computes the number days on which raining was incorrectly predicted
c = sum(np.where(((actul['rain'] == True)&(prdt['rain']==False)),True,False))
#Following computes the number days on which no-rain was incorrectly predicted
d = sum(np.where(((actul['rain'] == False)&(prdt['rain']==True)),True,False))
predt_per = (a+b)*100/(a+b+c+d)
我上面的代码花费了太多时间来计算。有没有更好的方法来实现上述结果?
现在,下面接受的答案解决了我的上述问题。看起来我下面给出的代码有问题,因为我得到100%
了所有数据帧的预测百分比。我的代码是:
alldates_df =
index met1_r2 useful met1_r2>0.5
0 0.824113 True True
1 0.903828 True True
2 0.500765 True True
3 0.889757 True True
4 0.890102 True True
5 0.893995 True True
6 0.933482 True True
7 0.872847 True True
8 0.913142 True True
9 0.901424 True True
10 0.910941 True True
11 0.927310 True True
12 0.934538 True True
13 0.946092 True True
14 0.653831 True True
15 0.390702 True False
16 0.878493 True True
17 0.899739 True True
18 0.938481 True True
19 -850.978703 False False
20 -21.802518 False False
met1_detacu = [] # Method1_detection accuracy at various settings
var_flset = np.arange(-5,1,0.01) # various filter settings
for i in var_flset:
pdt_usefl = alldates_df.assign(result=alldates_df['met1_r2']>i)
x = pd.concat([alldates_df['useful'],pdt_usefl['result']],axis=1).sum(1).isin([0,2]).mean()*100
met1_detacu.append(x)
plt.plot(var_flset,met1_detacu)
我上面的代码工作正常,但我得到了但我100%
在所有varible filter settings
. 这里不对劲。获得的情节:
预期剧情是:
@WeNYoBen
在您的情况下,假设索引是 df 的索引,因此我们可以使用sum
after concat
,因为 True + True ==2 和 False + False ==0
pd.concat([df1,df2],axis=1).sum(1).isin([0,2]).mean()*100
25.0
更新
met1_detacu = [] # Method1_detection accuracy at various settings
var_flset = np.arange(-5,1,0.01) # various filter settings
for i in var_flset:
pdt_usefl = alldates_df.assign(result=alldates_df['met1_r2']>i)
x = pd.concat([alldates_df['useful'],pdt_usefl['result']],axis=1).sum(1).isin([0,2]).mean()*100
met1_detacu.append(x)
plt.plot(var_flset,met1_detacu)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句