Создание столбца в кадре данных на основе нескольких условий на основе значений из разных столбцов.
Цель состоит в том, чтобы получить представление о том, когда первое интересное действие было совершено клиентом, это будет обозначено как 1 ниже t0.
Структура данных структурирована следующим образом:
cust_id first_act prod_1 prod_2 t0
0 1 1 1
22 2
23 2 1
24 2 1
25 2
26 3 1
27 3
28 3
29 4
30 4
Я хочу присвоить значение столбцу t0 на основе следующих условий:
если у покупателя 1 в prod_1: присвоить значение 1 для t0 в индексе, где у него 1 в prod_1.
если у покупателя нет 1 в prod_1, проверьте, имеет ли покупатель 1 в prod_2, и если true, присвойте t0 значение 1 в индексе, где условие истинно.
наконец: если у клиента нет prod_1 или prod_2, но есть 1 в first_act, присвойте значение 1 индексу, в котором первое действие истинно, в t0.
После этих условий в t0 должно быть только одно значение для каждого клиента.
Ожидаемый вывод для cust_id 2:
cust_id first_act prod_1 prod_2 t0
0 1 1 1
22 2 1
23 2 1
24 2 1 1
25 2
26 3 1
27 3
28 3
29 4
30 4
Я пытался сделать это с помощью вложенных операторов np.where, но это не сработало следующим образом:
df['t0'] = np.where(df['prod_1'] == 1, 1 ,
np.where(df['prod_2'] == 1, 1,
np.where(df['first_act'] == 1, 1, 0)))
Добавляет 1 к t0 в нескольких местах.
Обновление
@ Jeffyx
Я не знаю, немного ли это прояснилось, но я подумал:
if prod_1 == 1:
t0 = 1 at index of prod_1 == 1
if not prod_1 == 1:
if prod_2 == 1:
t0 = 1 at index of prod_2 == 1
if not prod_1 == 1 and not prod_2 == 1:
if first_act == 1:
t0 = 1 at index of first_act == 1