Я пытаюсь сгруппировать некоторые данные в четыре недели и использую pd.Grouper(key='created_at', freq='4W')
. Я хочу, чтобы группы были такими, чтобы, если у меня есть 8-недельные данные, скажем, с 2019-08-26 по 2019-10-20, первая группа будет колебаться с 2019-08-26 по 2019-09-22, а втораягруппа колеблется от 2019-09-23 до 2019-10-20. Однако при использовании группировщика он не группируется таким образом, скорее он привязывается к первому воскресенью и рассчитывает четыре недели оттуда, получая результат примерно так:
created_at
2019-09-01 317
2019-09-29 990
2019-10-27 645
Freq: 4W-SUN, dtype: int64
вместо:
created_at
2019-08-26 1048
2019-09-23 904
Freq: 4W-SUN, dtype: int64
Другой вариант, который я пробовал, - использовать pd.Timedelta(weeks=4)
в качестве частоты, например:
df.groupby(pd.Grouper(key='created_at', freq=pd.Timedelta(weeks=4)).size()
Однако это работает, только если в данных доступны все даты. Если данные не начинаются до 2019-08-30, например, метки групп отличаются, потому что это вычисляет дельту с самой ранней даты. Я рассматриваю возможность создания пользовательского объекта смещения, но не уверен, что это правильное направление.
Необработанные данные выглядят примерно так:
created_at
id
4324856 2019-08-26 12:38:51
4325472 2019-08-26 13:18:07
4325974 2019-08-26 13:47:09
4326205 2019-08-26 13:56:27
4326296 2019-08-26 13:57:35
с дополнительными столбцами, которые не относятся кпроблема под рукой.