Панды: бин даты с интервалом 30 минут и рассчитать средние - PullRequest
0 голосов
/ 20 сентября 2018

У меня есть кадр данных Pandas с двумя столбцами: speed и time.

speed   date
54.72   1:33:56
49.37   1:33:59
37.03   1:34:03
24.02   7:39:58
28.02   7:40:01
24.04   7:40:04
24.02   7:40:07
25.35   7:40:10
26.69   7:40:13
32.04   7:40:16
28.02   11:05:43
30.71   11:05:46
29.36   11:05:49
18.68   11:05:52
54.72   11:05:55
34.69   10:31:34
25.03   10:31:38
56.04   10:31:40
44.03   10:31:43

. Я хочу рассчитать среднее значение скоростей для бинов за 30 минут.Например, средняя скорость в течение 4-го интервала (1:31 - 2:00) составляет (54,72 + 49,37 + 37,03) / 3.Я думал о преобразовании часов, минут и секунд в секунды с 00:00, а затем у меня было 1800 секунд.Я пытался использовать binned_statistic из scipy.stats, но моя главная проблема в том, что я не могу найти способ разделить ячейки по дате и получить среднее значение скоростей.

Есть идеи?

Ответы [ 2 ]

0 голосов
/ 20 сентября 2018

Поскольку ваш столбец date на самом деле не является датой, вероятно, более разумно преобразовать ее в timedelta, чтобы к ней не прикреплялась дата.

Затем вы можете использовать dt.floor для группировки в 30-минутные интервалы.

import pandas as pd

df['date'] = pd.to_timedelta(df.date)
df.groupby(df.date.dt.floor('30min')).mean()

Вывод:

              speed
date               
01:30:00  47.040000
07:30:00  26.311429
10:30:00  39.947500
11:00:00  32.298000
0 голосов
/ 20 сентября 2018

Преобразование в дату и время с использованием pandas.Grouper + Смещение псевдонимов :

df['date'] = pd.to_datetime(df.date)
df.groupby(pd.Grouper(key='date', freq='30min')).mean().dropna()

    speed
date    
2018-09-20 01:30:00     47.040000
2018-09-20 07:30:00     26.311429
2018-09-20 10:30:00     39.947500
2018-09-20 11:00:00     32.298000
...