我有一个数据帧(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')
答案 0 :(得分:0)
您可以使用resample
方法和H
参数按小时分组。它比使用groupby
对大量时间序列数据更有效。
与'ohlc'
参数的聚合将为您提供所需的价格桶,而'sum'
参数将为您提供总量。
df.resample('H').agg({'Price': 'ohlc', 'Volume': 'sum'})