Я пытаюсь подсчитать количество уникальных клиентов для каждого продукта в течение скользящего окна (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'
Идеальный результат должен выглядеть примерно так, где значения представляют собой количество уникальных клиентов за двухдневный период:
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
. Тем не менее, я использовал этот подход в ответе на этот вопрос , но я боюсь, что он не будет хорошо масштабироваться в вычислительном отношении. В моем наборе данных содержится около 10 миллионов строк информации о продажах, и при тестировании только десятой части всех данных связанное решение заняло у меня около 10 минут. Есть какие-нибудь советы по более эффективному решению?
Большое спасибо!