Синтаксис панд для нескольких операторов if, использующих |и & операторы - PullRequest
0 голосов
/ 19 сентября 2018

Если я хочу использовать следующий синтаксис в Pandas для создания условия if с помощью операторов сравнения, нужно ли заключать условия or в их собственные скобки?

Без дополнительныхкруглые скобки

df.loc[(df['Col1'] == 'Yes') &
       (df['Col2'] == 'Yes') &
       (df['Col3'] == 'No') |
       (df['Col3'] == 'Yes') |
       (df['Col3'] == 'Maybe'),
       ['Result']] = 'CORRECT'

с дополнительными скобками

df.loc[(df['Col1'] == 'Yes') &
       (df['Col2'] == 'Yes') &
       ((df['Col3'] == 'No') |
       (df['Col3'] == 'Yes') |
       (df['Col3'] == 'Maybe')),
       ['Result']] = 'CORRECT'

Или оба действительны?Трудно сделать вывод из документации, которая должна быть правильной.

1 Ответ

0 голосов
/ 19 сентября 2018

Я думаю, что лучше использовать isin:

df.loc[(df['Col1'] == 'Yes') &
       (df['Col2'] == 'Yes') &
       (df['Col3'].isin(['No', 'Yes', 'Maybe'])), 'Result'] = 'CORRECT'

Но ваши утверждения отличаются:

@ DeepSpace - комментарий:

Это не имеет ничего общего с пандами, но с приоритетом оператора в Python .Побитовое и (&) имеет приоритет над побитовым или (|), поэтому в этом случае требуются круглые скобки.

np.random.seed(1245)

a = ['No', 'Yes', 'Maybe']
df = pd.DataFrame(np.random.choice(a, size=(10, 3)), columns=['Col1','Col2','Col3'])

df.loc[(df['Col1'] == 'Yes') &
       (df['Col2'] == 'Yes') &
       (df['Col3'] == 'No') |
       (df['Col3'] == 'Yes') |
       (df['Col3'] == 'Maybe'),
       'Result1'] = 'CORRECT'

df.loc[(df['Col1'] == 'Yes') &
       (df['Col2'] == 'Yes') &
       ((df['Col3'] == 'No') |
       (df['Col3'] == 'Yes') |
       (df['Col3'] == 'Maybe')),
       'Result2'] = 'CORRECT'

df.loc[(df['Col1'] == 'Yes') &
       (df['Col2'] == 'Yes') &
       (df['Col3'].isin(['No', 'Yes', 'Maybe'])), 'Result3'] = 'CORRECT'

print (df)
    Col1   Col2   Col3  Result1  Result2  Result3
0  Maybe    Yes    Yes  CORRECT      NaN      NaN
1     No  Maybe     No      NaN      NaN      NaN
2    Yes     No  Maybe  CORRECT      NaN      NaN
3  Maybe    Yes     No      NaN      NaN      NaN
4    Yes    Yes  Maybe  CORRECT  CORRECT  CORRECT
5    Yes  Maybe    Yes  CORRECT      NaN      NaN
6  Maybe  Maybe    Yes  CORRECT      NaN      NaN
7  Maybe     No    Yes  CORRECT      NaN      NaN
8  Maybe  Maybe  Maybe  CORRECT      NaN      NaN
9    Yes    Yes     No  CORRECT  CORRECT  CORRECT
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...