具有不一致数据点的时间序列数据的 Python 移动平均值



当数据按固定间隔(即 1 分钟、5 分钟等(采样时,我发现了大量与移动平均线相关的信息。但是,我需要针对具有不规则时间间隔的时间序列数据集的解决方案。

数据集包含两列:"时间戳"和"价格"。时间戳下降到毫秒,并且没有设置行的间隔。我需要获取数据帧并添加三个移动平均列:

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 添加一列。

以下作品,除了 NaN - 我不知道你对这些作品有多依恋:

foo  = df.apply(lambda x: df[(df['Timestamp'] <= x['Timestamp']) & (df['timestamp']> x['timestamp'] - pd.Timedelta('5 min'))]['Price'].mean(), axis=1)

最新更新