Сравнение 2 столбцов в фрейме данных Pandas и заполнение 3-го столбца

#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. спасибо, ваше объяснение причины возникновения ошибки также было полезным