首页 > 解决方案 > 分组数据帧上唯一值的滚动计数

问题描述

我正在尝试根据包含销售日期、产品和客户 ID 的销售数据计算每个产品在滚动窗口(2 天)内的唯一客户数量。数据如下所示:

Date       Product     Customer     
20200101   A           '101'
20200101   B           '101'
20200101   A           '102'
20200102   A           '101'
20200102   B           '103'
20200103   A           '101'
20200103   B           '102'
20200104   B           '101'
20200104   A           '103'
20200104   B           '103'
20200105   A           '102'
20200105   A           '101'

理想的输出应该与此类似,其中值是 2 天窗口内的唯一客户数量:

           A     B  
20200102   2     2    
20200103   1     2
20200104   2     3
20200105   3     2

我希望像

df.groupby([pandas.Grouper(key='Date', freq='D'), 'Product'])['Customer'].rolling('2D', on='Date').nunique()

会工作,但开始我得到以下错误:

ValueError: invalid on specified as Date, must be a column (of DataFrame), an Index or None

而且我现在nunique()也不能与rolling. 但是,我在回答这个问题时使用了这种方法,但恐怕它在计算上不会很好地扩展。我的数据集有大约 1000 万行销售信息,在仅对总数据的十分之一进行测试时,链接的解决方案需要我大约 10 分钟才能运行。有什么提示可以提供更有效的解决方案吗?

非常感谢!

标签: pythonpandas

解决方案


推荐阅读