当以固定间隔(即1分钟,5分钟等)采样数据时,我发现了大量与移动平均线相关的信息。但是,我需要一个具有不规则时间间隔的时间序列数据集的解决方案。
数据集包含两列,时间戳记和价格。时间戳记降低到毫秒,并且行没有设置间隔。我需要获取数据框并添加三个移动平均值列:
1分钟 5分钟 10分钟
我不想对数据重新采样,我希望最终结果是相同的行数,但要填充三列。 (即分别以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中添加一列。
答案 0 :(得分:0)
除NaN之外,以下作品-我不知道您对这些东西的依恋程度:
foo = df.apply(lambda x: df[(df['Timestamp'] <= x['Timestamp']) & (df['timestamp']> x['timestamp'] - pd.Timedelta('5 min'))]['Price'].mean(), axis=1)