Ответ 1
Вы не можете сделать, где df
- ваш DataFrame:
times = pd.to_datetime(df.timestamp_col)
df.groupby([times.hour, times.minute]).value_col.sum()
Кажется, это было бы довольно прямолинейно, но после почти целого дня я не нашел решение. Я загрузил свой dataframe с read_csv и легко проанализировал, объединил и проиндексировал дату и столбцы времени в один столбец, но теперь я хочу иметь возможность просто изменять и выполнять вычисления на основе часовых и минутных группировок, аналогичных тем, что вы можете делать в превосходный стержень.
Я знаю, как перенаправить на час или минуту, но он поддерживает часть даты, связанную с каждым часом/минутой, тогда как я хочу объединить набор данных ТОЛЬКО с часами и минутами, подобными группировке в excel pivots и выбрав "час" и "час", минута ", но не выбирая ничего другого.
Любая помощь будет принята с благодарностью.
Вы не можете сделать, где df
- ваш DataFrame:
times = pd.to_datetime(df.timestamp_col)
df.groupby([times.hour, times.minute]).value_col.sum()
Код Wes не работал у меня. Но функция DatetimeIndex (docs):
times = pd.DatetimeIndex(data.datetime_col)
grouped = df.groupby([times.hour, times.minute])
Объект DatetimeIndex представляет собой представление времени в pandas. Первая строка создает массив datetimes. Вторая строка использует этот массив для получения часовых и минутных данных для всех строк, что позволяет группировать данные (docs) эти значения.
Пришел к этому, когда я искал этот тип 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)])