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

时间:2018-10-09 20:20:17

标签: python pandas numpy dataframe time-series

当以固定间隔(即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中添加一列。

1 个答案:

答案 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)
相关问题