我有一个pandas数据框架,其中包含客户进入商店的日期。我正在寻找一种方法,使我能够从当前Date_Visited(包括当前访问)中计算客户在过去一个月访问商店的次数。
对于
以下的最小数据集Customer_ID Date_Visited (Year-Month-Day)
1 2020-07-10
2 2020-07-09
1 2020-01-01
2 2020-07-08
1 2020-07-08
3 2020-07-01
我正在寻找
的输出Customer_ID Date_Visited visit_times
1 2020-07-10 2
2 2020-07-09 2
1 2020-01-01 1
2 2020-07-08 1
1 2020-07-08 1
3 2020-07-01 1
我已经能够使用一个涉及循环的解决方案-但是对于大数据帧来说,这将是低效的。
我想过尝试合并数据框的两个副本,并使用类似的方法来计数日期之间的发生次数(给定ID值)从另一个数据框,但我不确定这种方法是否是解决这个问题的最佳方法
您可以按Customer_ID
和年/月分组(在排序的数据框上使用pandas.Grouper
(pandas.DataFrame.sort_values
使用日期列作为key
),并为每组应用cumcount
(您需要添加1,因为python中的计数从0开始):
df['visit_times'] = (df.sort_values(by='Date_Visited (Year-Month-Day)')
.groupby(['Customer_ID',
pd.Grouper(freq='M', key='Date_Visited (Year-Month-Day)')
])
.cumcount()+1
)
输出:
Customer_ID Date_Visited (Year-Month-Day) visit_times
0 1 2020-07-10 2
1 2 2020-07-09 2
2 1 2020-01-01 1
3 2 2020-07-08 1
4 1 2020-07-08 1
5 3 2020-07-01 1