python—统计特定日期范围内 Dataframe 中id的先前出现次数

ego6inou  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(377)

我有一个数据框,其中包含客户进入商店的日期。我正在寻找一种方法,可以让我计算一个客户从当前访问日期(包括当前访问)到过去一个月内访问商店的次数。
因此,对于下面的最小数据集

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

我已经能够使用涉及循环的解决方案,但对于大型 Dataframe 来说,这将是低效的。
我曾考虑尝试合并 Dataframe 的两个副本,并使用与从另一个 Dataframe 计算日期之间的发生次数(给定id值)类似的方法,但我不确定此方法是否是解决此问题的最佳方法

toe95027

toe950271#

你可以分组 Customer_ID 和年/月(使用 pandas.Grouper 关于排序 Dataframe ( pandas.DataFrame.sort_values 使用日期列作为 key )并应用 cumcount 每个组(在python中,当计数从0开始时,需要添加1):

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

相关问题