Получение среднего за минуту в пандах - PullRequest
0 голосов
/ 04 сентября 2018

Уже есть много вопросов о переполнении стека относительно того, что я спрашиваю, но у меня есть небольшое сомнение, и из-за этого я думаю, что мой вопрос отличается. В своем временном ряду я хочу получить среднее значение за минуту. Мой временной ряд выглядит примерно так: -

      time                         duration
2018-08-26T14:00:00.000Z           0.22
2018-08-26T14:00:00.000Z           0.23
2018-08-26T14:00:00.000Z           2.05
2018-08-26T14:00:00.000Z           2.5
2018-08-26T14:00:00.000Z           3.0
2018-08-26T14:00:01.000Z           30.4 
2018-08-26T14:00:01.000Z           30.4 
2018-08-26T14:00:01.000Z           30.4 
2018-08-26T14:00:02.000Z           30.4 
2018-08-26T14:00:02.000Z           30.4 
2018-08-26T14:00:03.000Z           30.4 
.....
2018-08-26T14:01:03.000Z           30.4 
2018-08-26T14:01:03.000Z           30.4 
2018-08-26T14:02:03.000Z           30.4 
2018-08-26T14:02:03.000Z           30.4 

Поскольку данные взяты из упругого поиска, у меня многократное наблюдение за одну и ту же секунду. Из «Несколько» я имею в виду, что у меня может быть 100 наблюдений из одной второй отметки времени.

Я использую приведенный ниже код для вычисления средней длительности в минуту, которую я получил от Групповой индекс по минутам и вычисление среднего

df.index = pd.DatetimeIndex(df.time)

df.groupby([df.index.values.astype('<M8[m]')])['duration'].mean()

Я получаю вывод, как показано ниже

2018-08-26 14:00:00    0.151470
2018-08-26 14:01:00    0.144745
2018-08-26 14:02:00    0.147503
2018-08-26 14:03:00    0.156921
2018-08-26 14:04:00    0.142978
2018-08-26 14:05:00    0.167170
2018-08-26 14:06:00    0.156233
2018-08-26 14:07:00    0.140044
2018-08-26 14:08:00    0.135376
2018-08-26 14:09:00    0.161247
2018-08-26 14:10:00    0.134211
2018-08-26 14:11:00    0.179065
2018-08-26 14:12:00    0.145470
2018-08-26 14:13:00    0.145623
2018-08-26 14:14:00    0.139927
2018-08-26 14:15:00    0.138283
2018-08-26 14:16:00    0.137545
2018-08-26 14:17:00    0.140346

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

Я буду признателен за любую помощь здесь.

1 Ответ

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

Вот для чего .resample():

resample() - это группировка по времени, за которой следует метод сокращения для каждой из ее групп.

Проверяемый пример:

>>> import pandas as pd
>>> import numpy as np
>>> np.random.seed(444)

>>> # millisecond frequency, 100000 periods starting 2017-01-01 00:00:00
>>> idx = pd.date_range(start='2017', periods=100000, freq='ms')
>>> idx.min(), idx.max()
(Timestamp('2017-01-01 00:00:00', freq='L'), Timestamp('2017-01-01 00:01:39.999000', freq='L'))

>>> s = pd.Series(np.random.randn(len(idx)), index=idx)
>>> s.resample('s').mean().head()
2017-01-01 00:00:00    0.009352
2017-01-01 00:00:01    0.061978
2017-01-01 00:00:02   -0.011118
2017-01-01 00:00:03    0.046698
2017-01-01 00:00:04   -0.008205

Ручная проверка должна соответствовать:

>>> s.loc['2017-01-01 00:00:00'].mean()
0.00935201762323959
>>> s.loc['2017-01-01 00:00:01'].mean()
0.061978455181838
...