Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
数据点不一致的时间序列数据的Python移动平均值_Python_Pandas_Numpy_Dataframe_Time Series - Fatal编程技术网

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

数据点不一致的时间序列数据的Python移动平均值,python,pandas,numpy,dataframe,time-series,Python,Pandas,Numpy,Dataframe,Time Series,我发现,当数据按固定间隔(即1分钟、5分钟等)采样时,有大量与移动平均数相关的信息。但是,我需要一个解决方案,用于具有不规则时间间隔的时间序列数据集 数据集包含两列,时间戳和价格。时间戳下降到毫秒,并且没有为行设置间隔。我需要获取数据帧并添加三个移动平均值列: 1分钟 5分钟 10分钟 我不想对数据进行重采样,我希望最终结果是相同数量的行,但根据需要填充三列。(即,每列的间隔分别为1/5/10分钟) 我感觉我接近了,但我不知道如何将移动平均值变量传递给此函数: import pandas as

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

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

1分钟 5分钟 10分钟

我不想对数据进行重采样,我希望最终结果是相同数量的行,但根据需要填充三列。(即,每列的间隔分别为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)
foo=df.apply(λx:df[(df['Timestamp']x['Timestamp']-pd.Timedelta('5分钟'))]['Price'].mean(),轴=1)

能否提供一个数据帧示例,以及该示例数据帧的预期输出?@rahlf23我编辑了我的帖子,以包含所需的信息。该示例似乎与描述不匹配:
04:00:00.023
不在
04:05:00.127
的五分钟之内,但仍包含在五分钟的平均值中。哎呀,我手工将其组合在一起。我把毫秒改为5分钟以内。用滑动窗口代替过度观察,用
1/diff(Timestamp)
加权平均值怎么样?