Python 比较布尔值的两个数据帧列

Python 比较布尔值的两个数据帧列,python,pandas,dataframe,Python,Pandas,Dataframe,我有两个数据帧,每个数据帧表示实际降雨和预测降雨情况。实际降雨数据帧是恒定的,因为这是一个已知的结果。下面给出了预测降雨数据帧 actul = index rain Day1 True Day2 False Day3 True Day4 True 预测降雨数据帧如下所示。该数据帧根据使用的预测模型不断变化 prdt = index rain Day1 False Day2 True Day3 True Day4 False 我正在开发上述预测模型的

我有两个数据帧,每个数据帧表示实际降雨和预测降雨情况。实际降雨数据帧是恒定的,因为这是一个已知的结果。下面给出了预测降雨数据帧

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%的检测精度。这里有点不对劲。
获得的绘图:

预期图为:


@WeNYoBen

在您的例子中,假设索引是df的索引,因此我们可以在
concat
之后使用
sum
,因为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)

看到这一行代码,我感到很惊讶。这就是我想要的预测百分比吗?@Msquare您可以检查您的输出并与之匹配:-)如果您不介意,您是否已经知道这会给出预测百分比。当然,在上面的例子中,
a=1、b=0、c=2、d=1和predt\u per=25%
。我感到惊讶和困惑。你是怎么知道的?@Msquare我刚刚读了你的代码,然后在我们知道了与的组合值后,发现这更像是平均问题sum@Msquare嗯,你想给我们看一些关于你后续问题的数据吗?