使用大尺寸刻度数据优化代码重采样

时间:2018-06-16 07:24:34

标签: python pandas numpy optimization

我有一个数据帧(df,行数:79446767),如下所示:

                            Price  Volume
date                                     
2016-05-01 22:00:00.334338  45.90    20.0
2016-05-01 22:00:00.335312    NaN     1.0
2016-05-01 22:00:00.538377  45.92     1.0
2016-05-01 22:00:00.590386  45.92     1.0    
2016-05-01 22:00:00.590493  45.92     1.0
2016-05-01 22:00:00.590493  45.92     1.0
2016-05-01 22:00:00.590493  45.92     1.0
(..omitted rows)

我使用此数据框按时间(此时:1小时)重新采样,如:

                     Price                         Volume    
                     close   open    high   low      sum
date                                                     
2016-05-01 22:00:00  45.57  45.90  45.96  45.55    4842.0
2016-05-01 23:00:00  45.66  45.59  45.68  45.56    2009.0
2016-05-02 00:00:00  45.64  45.66  45.68  45.58    1869.0
2016-05-02 01:00:00  45.61  45.64  45.68  45.59    1312.0
2016-05-02 02:00:00  45.58  45.62  45.65  45.55    1504.0
2016-05-02 03:00:00  45.47  45.58  45.61  45.47    1347.0
2016-05-02 04:00:00  45.47  45.48  45.55  45.43    2965.0
(..omitted rows)

但执行大约需要15分钟。还有另一种快速重新采样的方法吗?这是我的代码:

import pandas as pd
import numpy as np

aggregator = {
            "Price": ["last", "first", np.max, np.min],
            "Volume": "sum"
        }    
res = df.groupby(pd.Grouper(freq=1H, label='right')).agg(aggregator).dropna(axis=0, how='all')

1 个答案:

答案 0 :(得分:0)

您可以使用resample方法和H参数按小时分组。它比使用groupby对大量时间序列数据更有效。

'ohlc'参数的聚合将为您提供所需的价格桶,而'sum'参数将为您提供总量。

df.resample('H').agg({'Price': 'ohlc', 'Volume': 'sum'})