如何使用实时数据计算不同时间范围的均值?

时间:2018-09-10 08:49:59

标签: python python-3.x pandas

我正在与重采样和时间序列的均值计算作斗争。 我的示例在 BUT 上正常工作,但对我来说似乎没有优化,对于大型数据帧,它会很慢。

示例:

import pandas as pd
import numpy as np

df = pd.DataFrame(data={
    'open': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    'low': [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1],
    'high': [10, 20, 30, 40, 50, 60, 70, 80, 90, 100],
    'close': [1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5]
}, index=pd.date_range('2018-01-01 00:00:00', freq='T', periods=10))

df
                     open  low  high  close
2018-01-01 00:00:00     1  0.1    10    1.5
2018-01-01 00:01:00     2  0.2    20    2.5
2018-01-01 00:02:00     3  0.3    30    3.5
2018-01-01 00:03:00     4  0.4    40    4.5
2018-01-01 00:04:00     5  0.5    50    5.5
2018-01-01 00:05:00     6  0.6    60    6.5
2018-01-01 00:06:00     7  0.7    70    7.5
2018-01-01 00:07:00     8  0.8    80    8.5
2018-01-01 00:08:00     9  0.9    90    9.5
2018-01-01 00:09:00    10  1.0   100   10.5

然后我在df的每个索引处重新采样至5T,因为我需要计算均值直到在较高频率(5T)上该索引为止,然后将mean()的值放入主数据帧{{1 }}。

模拟我需要做什么,请查看完整的重采样代码:

df

它完美地工作。结果是:

ohlc = {'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last'}
sma = []
for row in df.itertuples():
    sma.append(df.loc['2018-01-01 00:00:00':row.Index].resample('5T', closed='left', label='left').apply(ohlc)['close'].rolling(2).mean().tail(1)[0])

df['5t_sma'] = sma

值是正确的,但问题是:

  1. 我在每个索引上都进行重采样,听起来太沉重了。
  2. 我知道我可以在不超过范围df open low high close 5t_sma 2018-01-01 00:00:00 1 0.1 10 1.5 NaN 2018-01-01 00:01:00 2 0.2 20 2.5 NaN 2018-01-01 00:02:00 3 0.3 30 3.5 NaN 2018-01-01 00:03:00 4 0.4 40 4.5 NaN 2018-01-01 00:04:00 5 0.5 50 5.5 NaN 2018-01-01 00:05:00 6 0.6 60 6.5 6.0 2018-01-01 00:06:00 7 0.7 70 7.5 6.5 2018-01-01 00:07:00 8 0.8 80 8.5 7.0 2018-01-01 00:08:00 9 0.9 90 9.5 7.5 2018-01-01 00:09:00 10 1.0 100 10.5 8.0 的情况下每5分钟计算一次平均值,问题是它假设我想立即分析整个数据帧, 我无法做到这一点,我必须将其视为“实时数据”。每分钟我都会得到1分钟数据(开盘,低盘,高盘,收盘)的更新,然后我需要在较高的时间范围内计算平均值。

我能否在不给熊猫施加过多压力(0.23.4)的情况下获得相同的结果? :)

0 个答案:

没有答案