Подвижный счетчик уникальных значений в сгруппированном фрейме данных - PullRequest
1 голос
/ 16 июня 2020

Я пытаюсь подсчитать количество уникальных клиентов для каждого продукта в течение скользящего окна (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 минут. Есть какие-нибудь советы по более эффективному решению?

Большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...