Pandas GroupBy без заполнения недостающих данных - PullRequest
0 голосов
/ 09 июля 2020

У меня есть файл получасовых данных, который я sh могу сгруппировать по часам. Это работает:

data.groupby(pd.Grouper(freq='1h')).agg('sum')

Однако он заполняет часы, когда нет получасовых данных.

Как я могу выполнить группировку, подобную этой, но не создавать записи, в которых не было данных во входном DataFrame? например, From:

07:00
07:30
09:00
09:30

Я хочу создать:

07:00
09:00

Not:

07:00
08:00
09:00

Спасибо

1 Ответ

1 голос
/ 09 июля 2020

Если вы просто хотите отфильтровать добавленное время, вы можете сделать то, что cs95 сказал в комментариях, или:

out = data.groupby(pd.Grouper(freq='1h')).sum(min_count=1).dropna()

min_count делает NaN выводом, если нет данных для bin, который затем можно удалить с помощью dropna().

Если вместо этого вы не хотите, чтобы эти дополнительные ячейки вычислялись в первую очередь , это может быть более сложным (обратите внимание, что по этому поводу есть похожий открытый пост , также с сегодняшнего дня ). Но, учитывая почасовую частоту бинов, вы можете сделать что-то вроде этого:

out1 = data.groupby(data.index.hour).sum()

И если данные охватывают несколько дней, вы можете сделать:

out2 = data.groupby([data.index.date, data.index.hour]).sum()

Но обратите внимание, что данные index сейчас не в формате datetime, поэтому вам может потребоваться обратное преобразование.

Вот пример данных, которые я использовал:

import pandas as pd

dr = pd.date_range('1-1-2020 7:00', periods=6, freq='30min')
data = pd.DataFrame([10,20,30,40,50,60], index=dr, columns=['Values'])
data = data[data.index.hour != 8]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...