【问题标题】:How to compare the values in 2 columns of a dataframe如何比较数据框两列中的值
【发布时间】:2020-05-19 08:54:49
【问题描述】:

我有以下数据框:

    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
..
..

我想比较 yy_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:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

【问题讨论】:

  • 其实是一个3列的数据框:y、probe、y_pred

标签: python python-3.x pandas numpy dataframe


【解决方案1】:

您可以使用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)])

不需要循环。

【讨论】:

  • @ManojKashyap 很高兴为您提供帮助。请不要忘记也为答案投票。
【解决方案2】:

不要重复代码,这里没有必要 - 只获取 GroupBy.size 的计数并选择 MultiIndex 中的值:

d = {'y': [0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0], 
     'proba': [0.637387, 0.635165, 0.766586, 0.637387, 
               0.635165, 0.766586, 0.724564, 0.889199],
     'y_pred': [1, 1, 0, 1, 1, 0, 0, 1]}
df = pd.DataFrame(d)
print (df)
     y     proba  y_pred
0  0.0  0.637387       1
1  0.0  0.635165       1
2  0.0  0.766586       0
3  1.0  0.637387       1
4  0.0  0.635165       1
5  0.0  0.766586       0
6  1.0  0.724564       0
7  1.0  0.889199       1

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)

【讨论】:

  • @ManojKashyap - 你把df改成df1了吗?
  • @ManojKashyap - 似乎使用df.loc[(1, 1)] 代替df1.loc[(1, 1)]df 代替df1,答案已编辑。
猜你喜欢
  • 2015-03-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-10
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多