#python #pandas
#python #pandas
Вопрос:
У меня есть DF, внутри которого есть 2 столбца int, ‘CNT’ и ‘STG_TABLE_CNT’. Я хочу добавить новый столбец ‘IS_MATCH’, который возвращает ‘Y’, если ‘CNT’ и ‘STG_TABLE_CNT’ имеют одинаковое значение, или ‘N’, если они этого не делают.
Я попробовал это:
if result['CNT'] == result['STG_TABLE_CNT']:
result['IS_MATCH'] = 'Y'
else:
result['IS_MATCH'] = 'N'
но это выдает следующую ошибку:
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
Я понимаю, что он ищет равенство (True / False) Я просто не уверен, как обойти это, чтобы вместо этого вернуть ‘Y’ или ‘N’
Ответ №1:
Используйте numpy.where
, это быстрее, чем apply
или itterating
:
import numpy as np
df['IS_MATCH'] = np.where(result['CNT'].eq(result['STG_TABLE_CNT']), 'Y', 'N')
Ответ №2:
result['CNT'] == result['STG_TABLE_CNT']
дает вам целую серию и pandas
жалуется, что не знает, как преобразовать эту серию в True
или False
. То, что вы действительно хотите, это что-то вроде
result['IS_MATCH'] = (result['CNT'] == result['STG_TABLE_CNT']).
apply(lambda x: 'Y' if x else 'N')
или
result['IS_MATCH'] = (result['CNT'] == result['STG_TABLE_CNT']).
map({True: 'Y', False: 'N'})
Комментарии:
1. спасибо, ваше объяснение причины возникновения ошибки также было полезным