Я нашел много информации, касающейся скользящих средних, когда данные выбираются через регулярные интервалы (например, 1 мин, 5 мин и т. Д.).Однако мне нужно решение для набора данных временных рядов с нерегулярными временными интервалами.
Набор данных содержит два столбца: Timestamp и Price.Временная метка уменьшается до миллисекунды, и для строк нет заданного интервала.Мне нужно взять мой фрейм данных и добавить три столбца скользящих средних:
1 мин 5 мин 10 мин
Я не хочу пересчитывать данные, я хочу, чтобы конечный результат был таким же числомстрок, но с тремя столбцами, заполненными в зависимости от обстоятельств.(IE, NaN до интервала 1/5/10 мин для каждого столбца соответственно)
Я чувствую, что приближаюсь, но не могу понять, как передать переменную скользящего среднего в эту функцию:
import pandas as pd
import numpy as np
# Load IBM data from CSV
df = pd.read_csv(
"C:/Documents/Python Scripts/MA.csv", names=['Timestamp',
'Price'])
# Create three moving average signals
df['Timestamp'] = pd.to_datetime(df['Timestamp'], errors='coerce')
df.set_index('Timestamp', inplace=True)
def movingaverage(values, window):
weights = np.repeat(1.0, window)/window
smas = np.convolve(values, weights, 'valid')
return smas
MA_1M = movingaverage(df, 1)
MA_5M = movingaverage(df, 5)
MA_10M = movingaverage(df, 10)
print(MA_1M)
Пример данных:
Timestamp Price
2018-10-08 04:00:00.013 152.59
2018-10-08 04:00:00.223 156.34
2018-10-08 04:01:00.000 152.73
2018-10-08 04:05:00.127 156.34
2018-10-08 04:10:00.000 152.73
Expected Output:
Timestamp Price MA_1M MA_5M MA10M
2018-10-08 04:00:00.013 152.59 N/A N/A N/A
2018-10-08 04:00:00.223 156.34 N/A N/A N/A
2018-10-08 04:01:00.000 154.73 154.55 N/A N/A
2018-10-08 04:05:00.127 155.34 155.34 155.47 N/A
2018-10-08 04:10:00.000 153.73 153.73 154.54 154.55
В каждой строке столбец MA берет эту временную метку и просматривает назад 1, 5 или 10 минут и вычисляет среднее значение.Сложность в том, что строки могут быть сгенерированы в любую миллисекунду.В моем коде выше я просто пытаюсь заставить скользящее среднее работать с переменной времени.Я предполагаю, что, пока количество строк совпадает, я могу использовать логику, чтобы добавить столбец к моей df.