Панды определяют, есть ли для каждой даты дата в предыдущем году в диапазоне + - 15 дней - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть датафрейм со всеми продажами клиентов за последние 4 года. Мне нужно проанализировать каждого покупателя, который приобрел за последние 30 дней, если он также покупал в предыдущие годы, но в пределах +/- 15 дней

Выводом должен быть список клиентов с 2 дополнительными столбцами (предыдущий год, 2 года назад) с соответствующим Y, если у них была покупка в предыдущем году (2 года назад)

E.g.

Cust. Purchase

12345    10/20/16

12345    03/15/17

12345    11/15/17

Анализ продаж: Покупка Cust 12345 11/08/18

Результат:

Cust Purchase. PY 2Year

12345    11/08/18  Y    N

Я предполагаю, что мне нужно зациклить всех клиентов за последние 30 дней с функцией, но не знаю, как ее написать

1 Ответ

0 голосов
/ 08 ноября 2018

Вот как я это сделаю:

import pandas as pd
from io import StringIO
import datetime as dt

Создание кадра данных:

s = StringIO('''Cust Purchase
12345 10/20/16
12345 03/15/17
12345 11/15/17 
''')

df = pd.read_csv(s, sep='\s+')
df.Purchase = pd.to_datetime(df.Purchase)

Функция, которая выполняет работу:

def test_prev_dates(date1, df=df,  year_back=1):
    for date2 in df.Purchase:
        if (date2.year == date1.year - year_back):
            date_temp = pd.to_datetime(f'{date1.year - 1}-{date1.month}-{date1.day}')
            date_lower = date_temp + dt.timedelta(days=-15)
            date_upper = date_temp + dt.timedelta(days=15)
            if (date2 >= date_lower) and (date2 <= date_upper):
                    return 'Y'
    return 'N'

Вы можете получить желаемый результат, зацикливаясь на клиентах:

test_prev_dates(pd.to_datetime("11/08/18"), df=df, year_back=1)

Возвращает Y

В течение двух лет назад звонок был бы:

test_prev_dates(pd.to_datetime("11/08/18"), df=df, year_back=2)

, который возвращает N

Надеюсь, это поможет.

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