Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何比较数据帧的两列中的值_Python_Python 3.x_Pandas_Numpy_Dataframe - Fatal编程技术网

Python 如何比较数据帧的两列中的值

Python 如何比较数据帧的两列中的值,python,python-3.x,pandas,numpy,dataframe,Python,Python 3.x,Pandas,Numpy,Dataframe,我有以下数据帧: y proba y_pred 0 1.0 0.637387 1 1 1.0 0.635165 1 2 1.0 0.766586 1 3 1.0 0.724564 1 4 1.0 0.889199 1 .. .. 我想比较y和y_pred,以便计算tp=y=1、y_pred=1、fp=y=0、y_pred=1、fn=y=1、y_pred=0和tn=y=0、y_pred=0。以下是我所尝试的: tp = 0 fp

我有以下数据帧:

    y   proba   y_pred
0   1.0 0.637387    1
1   1.0 0.635165    1
2   1.0 0.766586    1
3   1.0 0.724564    1
4   1.0 0.889199    1
..
..
我想比较y和y_pred,以便计算tp=y=1、y_pred=1、fp=y=0、y_pred=1、fn=y=1、y_pred=0和tn=y=0、y_pred=0。以下是我所尝试的:

tp = 0
fp = 0
fn = 0
tn = 0
if data1['y'] == 1 and data1['y_pred'] == 1:
    tp+= 1
elif data1['y'] == 0 and data1['y_pred'] == 1:
    fp+= 1
elif data1['y'] == 1 and data1['y_pred'] == 0:
    fn+= 1
elif data1['y'] == 0 and data1['y_pred'] == 0:
    tn+= 1
但是这段代码抛出了一个错误:

ValueError:序列的真值不明确。使用a.empty、a.bool、a.item、a.any或a.all


您可以使用len函数计算行数,如下所示:

tp = len(data1[data1['y'].eq(1) & data1['y_pred'].eq(1)])
fp = len(data1[data1['y'].eq(0) & data1['y_pred'].eq(1)])
fn = len(data1[data1['y'].eq(1) & data1['y_pred'].eq(0)])
tn = len(data1[data1['y'].eq(0) & data1['y_pred'].eq(0)])

不需要循环。

您可以使用len函数计算行数,如下所示:

tp = len(data1[data1['y'].eq(1) & data1['y_pred'].eq(1)])
fp = len(data1[data1['y'].eq(0) & data1['y_pred'].eq(1)])
fn = len(data1[data1['y'].eq(1) & data1['y_pred'].eq(0)])
tn = len(data1[data1['y'].eq(0) & data1['y_pred'].eq(0)])

无需循环。

不要重复代码,此处无需重复-仅获取计数并在多索引中选择值:


不要重复代码,此处不是必需的-仅获取计数并在多索引中选择值:


它实际上是一个由3列组成的数据框:y,probe,y_predIt它实际上是一个由3列组成的数据框:y,probe,y_pred@ManojKashyap很乐意帮忙。“请别忘了把答案也投上一票。”ManojKashyap很乐意帮忙。请不要忘记对答案进行投票。@ManojKashyap-您是否将df更改为df1?@ManojKashyap-看起来像是使用df.loc[1,1]而不是df1.loc[1,1],df而不是df1,答案已编辑。@ManojKashyap-您是否将df更改为df1?@ManojKashyap-看起来像是使用df.loc[1,1]而不是df1,答案已编辑。
df1 = df.groupby(['y','y_pred']).size()
print (df1)
y    y_pred
0.0  0         2
     1         3
1.0  0         1
     1         2

tp = df1.loc[(1, 1)]
print (tp)
2
fp = df1.loc[(0, 1)]
print (fp)
3

fn = df1.loc[(1, 0)]
print (fn)
1
tn = df1.loc[(0, 0)]
p2rint (tn)