Группировать данные в бункеры по 30 минут - PullRequest
0 голосов
/ 22 января 2019

У меня есть файл .csv с некоторыми данными.В этом файле есть только один столбец с временными метками.Мне нужно организовать эти данные в лотки по 30 минут.Вот как выглядят мои данные:

Timestamp
04/01/2019 11:03
05/01/2019 16:30
06/01/2019 13:19
08/01/2019 13:53
09/01/2019 13:43

Таким образом, в этом случае последние две точки данных будут сгруппированы в ячейку, которая включает все данные с 13:30 до 14:00.

Это то, что я уже пробовал

df = pd.read_csv('book.csv')
df['Timestamp'] = pd.to_datetime(df.Timestamp)
df.groupby(pd.Grouper(key='Timestamp', 
freq='30min')).count().dropna()

Я получаю около 7000 строк, показывающих все часы всех дней с подсчетом рядом с ними, например:

2019-09-01 03:00:00   0
2019-09-01 03:30:00   0
2019-09-01 04:00:00   0
 ...

Я хочу создавать ячейки только для тех часов, которые у меня есть в наборе данных.Я хочу увидеть что-то вроде этого:

Time         Count

11:00:00      1

13:00:00      1

13:30:00      2 (we have two data points in this interval)

16:30:00      1

Заранее спасибо!

1 Ответ

0 голосов
/ 22 января 2019

Используйте groupby.size как:

df['Timestamp'] = pd.to_datetime(df['Timestamp'])
df = df.Timestamp.dt.floor('30min').dt.time.to_frame()\
                 .groupby('Timestamp').size()\
                 .reset_index(name='Count')

Или согласно предложению jpp:

df = df.Timestamp.dt.floor('30min').dt.time.value_counts().reset_index(name='Count')


print(df)
  Timestamp  Count
0  11:00:00      1
1  13:00:00      1
2  13:30:00      2
3  16:30:00      1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...