Использование grouper для группировки меток времени в определенном диапазоне - PullRequest
0 голосов
/ 07 марта 2019

Предположим, что у меня есть фрейм данных (DF). Индекс этого фрейма данных - это отметка времени с 11 до 18 часов каждый день, и этот фрейм данных содержит 30 дней. Я хочу сгруппировать его каждые 30 минут. Это функция, которую я использую:

out = DF.groupby(pd.Grouper(freq='30min'))

Дата начала вывода правильная, но она учитывает целый день (24 часа) для группировки. Например, в новой отметке времени у меня есть что-то вроде этого:

11:00:00
11:30:00
12:00:00
12:30:00
...
18:00:00
18:30:00
...
23:00:00
23:30:00
...
2:00:00
2:30:00
...
...
10:30:00
11:00:00
11:30:00

В результате многие выходы пусты, потому что с 6:00 до 11:00 у меня нет никаких данных.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Как упомянуто в комментарии к оригинальному сообщению, это как ожидалось. Если вы хотите удалить пустые группы, просто нарежьте их потом. Предполагая, что в этом случае вы используете счет для агрегирования:

df = df.groupby(pd.Grouper(freq='30min')).count()
df = df[df > 0]
0 голосов
/ 07 марта 2019

Одно из возможных решений должно быть DatetimeIndex.floor:

out = DF.groupby(DF.index.floor('30min'))

Или используйте dropna после агрегатной функции:

out = DF.groupby(pd.Grouper(freq='30min')).mean().dropna()
...