pandas вычисляемое поле путем сравнения других полей и значений словаря - PullRequest
0 голосов
/ 20 февраля 2020

У меня есть два кадра данных. первый из них выглядит следующим образом:

id, orderdate, orderid, amount,camp1, camp2, camp3
1   2020-01-01  100      100       1    0       0
2   2020-02-01  120      200       1    0       1
3   2019-12-01  130      500       0    1       0
4   2019-11-01  150      750       0    1       0
5   2020-01-01  160      1000      1    1       1

camp1, camp2, camp3 части показывают, посетил ли клиент кампанию.

, и кампании имеют словарь периодов, такой что

camp_periods = {'camp1': 
                        [datetime.strptime('2019-04-08', '%Y-%m-%d'), datetime.strptime('2019-06-06', '%Y-%m-%d')],
                'camp2':
                        [datetime.strptime('2019-09-15', '%Y-%m-%d'), datetime.strptime('2019-09-28', '%Y-%m-%d')],
                'camp3':
                        [datetime.strptime('2019-11-15', '%Y-%m-%d'), datetime.strptime('2019-12-28', '%Y-%m-%d')]
                 }

Я хотел бы создать таблицу с указанием количества заказов и общей суммой order amounts на клиента, если orderdate находится между периодами кампании в словаре camp_periods и если клиент участвовал в этой кампании.

1 Ответ

0 голосов
/ 21 февраля 2020

Я не уверен, хорошо ли я понял ваш вопрос, наверное, когда вы говорите, что количество заказов и общее количество order amounts вы хотите получить первые n количество заказов, которые меньше или равны учитывая всего order amounts, вот мой подход:

пример данных:

enter image description here

from operator import or_
from functools import reduce


number_orders = 2
total_order_amounts = 3000

дата заказа между периоды кампании в словаре camp_periods и если клиент участвовал в этой кампании

cond = [(df[k].astype('bool') & df['orderdate'].between(*v)) for k, v in camp_periods.items()]
cond = reduce(or_, cond)
df_cond = df[cond]
df_final = df_cond[df_cond['amount'].cumsum() <= total_order_amounts].head(number_orders)

df_final

вывод:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...