Как агрегировать временную шкалу даты панд только по часам - PullRequest
2 голосов
/ 11 апреля 2019

У меня есть таблица временной шкалы панд, содержащая объекты дат и оценки:

          datetime   score
2018-11-23 08:33:02      4
2018-11-24 09:43:30      2
2018-11-25 08:21:34      5
2018-11-26 19:33:01      4
2018-11-23 08:50:40      1
2018-11-23 09:03:10      3

Я хочу агрегировать счет по часам без учета даты, желаемый результат:

08:00:00        10
09:00:00        5
19:00:00        4

Так что в основном я должен удалить дату-месяц-год, а затем сгруппировать счет по часам,

Я попробовал эту команду

monthagg = df['score'].resample('H').sum().to_frame()

Что работает, но учитывает дату-месяц-год, Как удалить DD-MM-YYYY и агрегировать по часам?

Ответы [ 3 ]

2 голосов
/ 11 апреля 2019

Одним из возможных решений является использование DatetimeIndex.floor для установленных минут и секунд в 0, а затем преобразование DatetimeIndex в строки в DatetimeIndex.strftime, затем агрегирование sum :

a = df['score'].groupby(df.index.floor('H').strftime('%H:%M:%S')).sum()
#if column datetime
#a = df['score'].groupby(df['datetime'].dt.floor('H').dt.strftime('%H:%M:%S')).sum()
print (a)
08:00:00    10
09:00:00     5
19:00:00     4
Name: score, dtype: int64

Или используйте DatetimeIndex.hour и совокупность sum:

a = df.groupby(df.index.hour)['score'].sum()
#if column datetime
#a = df.groupby(df['datetime'].dt.hour)['score'].sum()
print (a)
datetime
8     10
9      5
19     4
Name: score, dtype: int64
2 голосов
/ 11 апреля 2019

Настройка для создания фрейма с объектами даты и времени:

import datetime
import pandas as pd

rows = [datetime.datetime.now() + datetime.timedelta(hours=i) for i in range(100)]
df = pd.DataFrame(rows,columns = ["date"])

Теперь вы можете добавить такой часовой столбец, а затем сгруппировать по нему:

df["hour"] = df["date"].dt.hour
df.groupby("hour").sum()
1 голос
/ 11 апреля 2019
import pandas as pd
df = pd.DataFrame({'datetime':['2018-11-23 08:33:02 ','2018-11-24 09:43:30',
                               '2018-11-25 08:21:34',
                               '2018-11-26 19:33:01','2018-11-23 08:50:40',
                               '2018-11-23 09:03:10'],'score':[4,2,5,4,1,3]})
df['datetime']=pd.to_datetime(df['datetime'], errors='coerce')
df["hour"] = df["datetime"].dt.hour
df.groupby("hour").sum()

Выход:

8   10
9   5
19  4
...