代码之家  ›  专栏  ›  技术社区  ›  Dail

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

  •  1
  • Dail  · 技术社区  · 8 年前

    我正在与重新采样和时间序列的平均计算作斗争。 我的例子是正确的 但是

    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
    

    然后我重新取样到5T df 因为我需要计算平均值,直到在更高频率(5T)上的索引,并将平均值()的值放入主数据框中 数据框 .

    到 模拟

    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
    

    它工作得很好。结果是:

    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
    

    这些值是正确的,但问题是:

    1. 我在每个索引都重新取样,听起来太重了。
    2. 我知道我可以在不超过范围的情况下计算每5分钟指数的平均值 loc[start:end] 我不能那样做,我必须把它当作“实时数据”。每分钟我都会得到一个1分钟数据的更新(打开、低、高、关闭),然后我需要计算更高时间段的平均值。

    我能在不给熊猫太多压力的情况下得到同样的结果吗(0.23.4)?:)

    0 回复  |  直到 8 年前