Pandas: несколько условий при индексировании фрейма данных – неожиданное поведениеPython

Программы на Python
Anonymous
Pandas: несколько условий при индексировании фрейма данных – неожиданное поведение

Сообщение Anonymous »

Я фильтрую строки в кадре данных по значениям в двух столбцах.
По какой-то причине оператор OR ведет себя так, как я ожидал от оператора AND, и наоборот.
Мой тестовый код:

Код: Выделить всё

df = pd.DataFrame({'a': range(5), 'b': range(5) })

# let's insert some -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1

df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]

print(pd.concat([df, df1, df2], axis=1,
keys = [ 'original df', 'using AND (&)', 'using OR (|)',]))
И результат:

Код: Выделить всё

      original df      using AND (&)      using OR (|)
a  b              a   b             a   b
0            0  0              0   0             0   0
1           -1 -1            NaN NaN           NaN NaN
2            2  2              2   2             2   2
3           -1  3            NaN NaN            -1   3
4            4 -1            NaN NaN             4  -1

[5 rows x 6 columns]
Как видите, оператор AND удаляет каждую строку, в которой хотя бы одно значение равно -1. С другой стороны, оператор OR требует, чтобы оба значения были равны -1, чтобы их можно было отбросить. Я ожидал прямо противоположного результата. Может ли кто-нибудь объяснить такое поведение?
Я использую pandas 0.13.1.

Вернуться в «Python»