我有一个数据框架,其中包含过去4年所有客户的销售情况。我需要分析最近30天内购买的每位客户(如果他们在前几年也购买了+/- 15天范围内的商品)
如果上一年(2年之前)有购买,则输出应为带有2个附加列(前一年,2年之前)且具有相关Y的客户的列表
E.g.
Cust. Purchase
12345 10/20/16
12345 03/15/17
12345 11/15/17
分析销售额: 客户购买 12345 18/08/18
结果:
Cust Purchase. PY 2Year
12345 11/08/18 Y N
我认为我需要使用函数来循环过去30天的所有客户,但不确定如何编写
答案 0 :(得分:0)
这就是我要做的事情:
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
希望这会有所帮助。