统计某个ID在某个日期范围内出现在Dataframe中的次数



我有一个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

最新更新