У меня есть набор данных временных меток и значений в пандах.Интервал между временными метками составляет ~ 12 секунд на общем временном промежутке, равном примерно одному году, но иногда есть пропущенные точки (т. Е. Временные ряды нерегулярны, поэтому я не могу использовать фиксированные размеры окон).
Я хочу вычислить скользящие средние значений за интервалы в 1 минуту, но я не получаю ожидаемого поведения.Я нашел похожую проблему здесь , но она использовала сумму, а также предварительные панды 0.19.0.Я использую Pandas 0.23.4.
Пример данных
Time, X
2018-02-02 21:27:00, 75.4356
2018-02-02 21:27:12, 78.29821
2018-02-02 21:27:24, 73.098345
2018-02-02 21:27:36, 78.3331
2018-02-02 21:28:00, 79.111
Обратите внимание, что 2018-02-02 21:27:48
отсутствует.
Для скользящей суммы я мог бы просто заполнить пропущенные значения нулями, но для среднего значения я не хочу, чтобы пропущенные точки считались реальными точками данных (например, я хочу, чтобы окно было суммой(точки данных за данный интервал) / количество точек данных за интервал).
Я хотел бы сделать это для разных отрезков времени (т. Е. 1 мин, 5 мин, 15 мин, 1 час и т. Д.).
Самое близкое к получению фактических значений я должен был сделать:
Код
df['rolling_avg']=df.rolling('1T',on='Time').X.mean()
Насколько я понимаю, это будет 1 минутасредние.
Но тогда я не уверен, как интерпретировать вывод.Я ожидал бы NaN в течение первой 1 + 1 минуты, поскольку нет ничего, на чем можно основывать скользящее среднее, но вместо этого у меня есть значения.
Выход
Time X rolling_avg
0 2018-02-02 21:27:00 75.4356 75.435600
1 2018-02-02 21:27:12 78.29821 76.866905
2 2018-02-02 21:27:24 73.098345 75.610718
3 2018-02-02 21:27:36 78.3331 76.291314
4 2018-02-02 21:28:00 79.111 77.210164
По сути, в этих выходных данных df[1].rolling_avg
равен (Value[0]+Value[1])/2
, хотя интервал составлял 12 секунд, а не 1 минуту.
Есть ли способ сделать то, что я пытаюсь сделать, или мне нужно написать цикл for, чтобы сделать это вручную?