Как сравнить несколько логических значений в кадре данных - PullRequest
0 голосов
/ 03 августа 2020

У меня есть такой df:

         customer_id                       offer_id                   viewed_withintime completed_withintime
0   389bc3fa690240e798340f5a15918d5c    f19421c1d4aa40978ebb69ca19b0e20d    True           True
1   389bc3fa690240e798340f5a15918d5c    f19421c1d4aa40978ebb69ca19b0e20d    True           False
2   389bc3fa690240e798340f5a15918d5c    f19421c1d4aa40978ebb69ca19b0e20d    True           False

Я хотел создать новый столбец с именем offer_succussful, если оба viewed_withintime и completed_withintime равны True, тогда значение для offer_succussful - это 1, иначе это 0.

Вот мой код:

# label offer_successful to 1 if an offer is viewed and completed within offer_endtime, if not, set it to 0
offer_success_merge['offer_successful'] = (offer_success_merge['completed_withintime'] == True) and (offer_success_merge['viewed_withintime'] == True)

Это возвращает ошибку:

ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Может кто-нибудь взглянуть для меня не знаю, как изменить этот фрагмент кода ... Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 августа 2020

Вы также можете использовать:

df['offer_successful'] = (df['viewed_withintime']== True) & (df['completed_withintime']== True)
1 голос
/ 03 августа 2020

Вы можете использовать модуль numpy для решения проблемы:

import numpy as np
offer_success_merge['offer_successful'] = np.logical_and((offer_success_merge['completed_withintime'] == True), (offer_success_merge['viewed_withintime'] == True))
...