Подтвердить что ты не робот

Python Pandas: групповой столбец datetime в часовом и минутном скоплениях

Кажется, это было бы довольно прямолинейно, но после почти целого дня я не нашел решение. Я загрузил свой dataframe с read_csv и легко проанализировал, объединил и проиндексировал дату и столбцы времени в один столбец, но теперь я хочу иметь возможность просто изменять и выполнять вычисления на основе часовых и минутных группировок, аналогичных тем, что вы можете делать в превосходный стержень.

Я знаю, как перенаправить на час или минуту, но он поддерживает часть даты, связанную с каждым часом/минутой, тогда как я хочу объединить набор данных ТОЛЬКО с часами и минутами, подобными группировке в excel pivots и выбрав "час" и "час", минута ", но не выбирая ничего другого.

Любая помощь будет принята с благодарностью.

4b9b3361

Ответ 1

Вы не можете сделать, где df - ваш DataFrame:

times = pd.to_datetime(df.timestamp_col)
df.groupby([times.hour, times.minute]).value_col.sum()

Ответ 2

Код Wes не работал у меня. Но функция DatetimeIndex (docs):

times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])

Объект DatetimeIndex представляет собой представление времени в pandas. Первая строка создает массив datetimes. Вторая строка использует этот массив для получения часовых и минутных данных для всех строк, что позволяет группировать данные (docs) эти значения.

Ответ 3

Пришел к этому, когда я искал этот тип groupby. Код Wes выше не работал у меня, но не уверен, что из-за изменений в pandas с течением времени.

В pandas 0.16.2, в конце концов, я сделал следующее:

grp = data.groupby(by=[data.datetime_col.map(lambda x : (x.hour, x.minute))])
grp.count()

У вас есть (час, минута) кортежи как сгруппированный индекс. Если вам нужен мультииндекс:

grp = data.groupby(by=[data.datetime_col.map(lambda x : x.hour),
                       data.datetime_col.map(lambda x : x.minute)])