首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Pandas -count顾客在购买前访问商店的次数。(仅包括购买日期前30天的访问)

Pandas -count顾客在购买前访问商店的次数。(仅包括购买日期前30天的访问)
EN

Stack Overflow用户
提问于 2020-06-12 12:41:05
回答 1查看 241关注 0票数 0

我有两个不同大小的数据帧(~100k条记录)。Df1包含customer-ID和购买日期。Df2包含客户ID和访问日期。

在购买之前,我想通过计算顾客访问商店的次数(使用df2中的“a Date”)在df1中创建一个新列。条件是访问日期必须小于购买日期前30天。

以下是示例数据

df1:

代码语言:javascript
运行
复制
df1 = pd.DataFrame({'Cust ID': [1,2,2,2,3,3], 'Transaction ID':[1001,1002,1003,1004,1005,1006], 'Purchase Date':["1/20/2017", "1/20/2018", "1/20/2017", "1/5/2017","1/20/2017","1/20/2017"]})`

Cust ID Transaction ID  Purchase Date
0   1   1001    1/20/2017
1   2   1002    1/20/2018
2   2   1003    1/20/2017
3   2   1004    1/5/2017
4   3   1005    1/20/2017
5   3   1006    1/20/2017

df2:

代码语言:javascript
运行
复制
df2 = pd.DataFrame({'Cust ID': [1,1,1,1,1,2,2,2],  'Visit Date':["1/2/2017", "1/3/2017", "1/4/2017", "12/5/2017", "1/23/2017", "1/2/2017","1/3/2017","1/24/2017"]})

    Cust ID Store-ID    Visit Date
0   1   A1  1/2/2017
1   1   A1  1/3/2017
2   1   A1  1/4/2017
3   1   A1  12/5/2017
4   1   A1  1/23/2017
5   2   A1  1/2/2017
6   2   A1  1/3/2017
7   2   A1  1/24/2017

预期输出:

代码语言:javascript
运行
复制
Cust ID Transaction ID  Purchase Date   Count of (Past 1-month visit)
0   1   1001    1/20/2017   3
1   2   1002    1/20/2017   2
2   2   1003    1/20/2018   0
3   2   1004    1/5/2017    2
4   3   1005    1/20/2017   0
5   3   1006    1/20/2017   0

我是python和pandas.Your的新手,非常感谢您的帮助。

关于Karthik。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 15:34:21

购买日期从访问日期开始计算,访问前30天的条件提取与原始'df1‘合并。

代码语言:javascript
运行
复制
df1['Purchase Date'] = pd.to_datetime(df1['Purchase Date'], format='%m/%d/%Y')
df2['Visit Date'] = pd.to_datetime(df2['Visit Date'], format='%m/%d/%Y')
df3 = df2.merge(df1, on='Cust ID')
df3['Past_1M'] = df3['Purchase Date'] - df3['Visit Date']
import datetime
df3 = df3[(df3['Past_1M'] <= datetime.timedelta(30)) & (df3['Past_1M'] >= datetime.timedelta(0))]
df3 = df3.groupby(['Cust ID', 'Transaction ID']).agg('count').reset_index()
df3 = df1.merge(df3, on=['Cust ID', 'Transaction ID'], how='outer').fillna(0)
df3 = df3.iloc[:,[0,1,2,5]]

df3
    Cust ID Transaction ID  Purchase Date_x Past_1M
0   1   1001    2017-01-20  3.0
1   2   1002    2018-01-20  0.0
2   2   1003    2017-01-20  2.0
3   2   1004    2017-01-05  2.0
4   3   1005    2017-01-20  0.0
5   3   1006    2017-01-20  0.0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62337618

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档