熊猫确定每个日期是否有上一年的日期在+-15天内

时间:2018-11-08 03:15:37

标签: python pandas

我有一个数据框架,其中包含过去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天的所有客户,但不确定如何编写

1 个答案:

答案 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

希望这会有所帮助。