Как создать еще один столбец в pandas на основе условия?

#python #pandas

#python #pandas

Вопрос:

У меня есть два столбца — Punchout и Contract. Мне нужен столбец с флагом каталога, где он равен FALSE, если Punchout и Contract оба равны NAN, в противном случае это TRUE. Я написал следующий фрагмент кода:

 req_line['Catalog_Flag'] = np.where((req_line['Contract']) amp; (req_line['Punchout']) = '[]',False,True)
 

но ошибка, которую он выдает, : SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

Есть ли какой-либо другой способ? Пожалуйста, помогите!

ПРИМЕР ДАННЫХ

 Contract | Punchout | Flag
NaN      | NaN      | False
NaN      | Computer Information | True
Non-CLM0_Cat_01 | NaN | True
 

Комментарии:

1. Вы пытаетесь == ? Можете ли вы добавить некоторые примеры данных?

2. Да, я пробовал это. Редактирование вопроса и добавление примеров данных.

Ответ №1:

Здесь np.where нет необходимости, просто используйте ~ для инвертирования маски с Series.isna :

 req_line['Catalog_Flag'] = ~(req_line['Contract'].isna() amp; req_line['Punchout'].isna())
 

Работает как тест, если нет пропущенных значений с | для побитового OR по Series.notna :

 req_line['Catalog_Flag'] = req_line['Contract'].notna() | req_line['Punchout'].notna()

print (req_line)
          Contract              Punchout   Flag  Catalog_Flag
0              NaN                   NaN  False         False
1              NaN  Computer Information   True          True
2  Non-CLM0_Cat_01                   NaN   True          True
 

Ответ №2:

Использовать Series.isna для идентификации nan :

 req_line['Catalog_Flag'] = np.where(req_line['Contract'].isna() amp; req_line['Punchout'].isna(), False, True)