Передискретизация / группировка времени на определенный промежуток времени / период - PullRequest
1 голос
/ 24 октября 2019

Я пытаюсь сгруппировать некоторые данные в четыре недели и использую 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

с дополнительными столбцами, которые не относятся кпроблема под рукой.

1 Ответ

0 голосов
/ 25 октября 2019

Попробуйте добавить аргумент closed='left' в pd.Grouper () . По умолчанию закрытый конец интервала равен 'right'

df.groupby(pd.Grouper(key='created_at', freq='4W', closed='left')).size()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...