Вот как я это сделаю:
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
Надеюсь, это поможет.