Python Pandas:根据条件选择行

时间:2017-03-31 18:20:39

标签: python pandas

我有以下格式的pandas DataFrame:

df.head()

        y   y_pred
599     0   0
787     9   9
47      2   2
1237    1   1
1069    6   6

我想找到行/索引号 - 其中y!= y_pred。

我试图通过Select来做,但我无法这样做。请帮忙。

TIA

2 个答案:

答案 0 :(得分:4)

使用query

df = df.query('y != y_pred').index

样品:

print (df)
      y  y_pred
599   0       1 <-values changed for match
787   9       9
47    2       2
1237  1       1
1069  6       3 <-values changed for match

df = df.query('y != y_pred').index
print (df)
Int64Index([599, 1069], dtype='int64')

boolean indexing的解决方案是:

df1 = df[df.y != df.y_pred].index
print (df1)
Int64Index([599, 1069], dtype='int64')

或另一个answer

检查不同的值:

print (df.query('y != y_pred'))
      y  y_pred
599   0       1
1069  6       3

print (df[df.y != df.y_pred])
      y  y_pred
599   0       1
1069  6       3

答案 1 :(得分:2)

尝试:

df.index[df.y != df.y_pred]

让我们改变您的样本数据

df.iloc[0, 0] = 1
df.iloc[3, 1] = 0
print(df)

      y  y_pred
599   1       0
787   9       9
47    2       2
1237  1       0
1069  6       6

然后尝试我们的代码

df.index[df.y != df.y_pred]

Int64Index([599, 1237], dtype='int64')

为了提高效率,请使用基础numpy数组

df.index.values[df.y.values != df.y_pred.values]

array([ 599, 1237])

您可以使用

返回df子集
df.loc[(df.y != df.y_pred).values]

      y  y_pred
599   1       0
1237  1       0