#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)