【发布时间】:2019-03-14 16:30:43
【问题描述】:
当数据以固定间隔(即 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 添加一列。
【问题讨论】:
-
能否包含您的数据帧样本以及该样本数据帧的预期输出?
-
@rahlf23 我已经编辑了我的帖子以包含所请求的信息。
-
该示例似乎与描述不符:
04:00:00.023不在04:05:00.127的五分钟内,但仍包含在五分钟平均值中。 -
糟糕,我是手工把它放在一起的。我将毫秒更改为 5 分钟内。
-
在时间而不是观察中使用滑动窗口,并使用
1 / diff(Timestamp)来加权平均值呢? stackoverflow.com/q/14631139/2954547
标签: python pandas numpy dataframe time-series