我从API连续获取15分钟的OHLC数据,我希望将其重新采样到30分钟1H等
+----------------------+----------+----------+----------+----------+------------+
| time | open | high | low | close | volumeto |
+----------------------+----------+----------+----------+----------+------------+
| | | | | | |
| 2018-06-26 03:30:00 | 6244.56 | 6250.54 | 6243.55 | 6247.34 | 1801280.76 |
| 2018-06-26 03:45:00 | 6247.34 | 6257.61 | 6246.43 | 6248.23 | 2551368.76 |
| 2018-06-26 04:00:00 | 6248.53 | 6248.53 | 6238.11 | 6239.83 | 2148705.55 |
| 2018-06-26 04:15:00 | 6239.83 | 6240.93 | 6232.14 | 6239.00 | 1906012.45 |
| 2018-06-26 04:30:00 | 6239.78 | 6269.14 | 6239.67 | 6260.96 | 3869709.59 |
| 2018-06-26 04:45:00 | 6261.16 | 6263.50 | 6249.46 | 6260.19 | 2236911.26 |
| 2018-06-26 05:00:00 | 6260.19 | 6284.27 | 6257.97 | 6263.73 | 5131896.24 |
| 2018-06-26 05:15:00 | 6263.73 | 6272.73 | 6263.59 | 6270.30 | 1589515.40 |
| 2018-06-26 05:30:00 | 6270.30 | 6286.36 | 6268.78 | 6270.69 | 2859640.60 |
| 2018-06-26 05:45:00 | 6271.75 | 6274.69 | 6259.29 | 6261.20 | 2448639.24 |
+----------------------+----------+----------+----------+----------+------------+
根据我的用例,我将15分钟的3:45和4:00四舍五入到30分钟的4:00,依此类推
agg = { 'open': 'first', 'high': 'max', 'low': 'min', 'close': 'last', 'volumeto': 'sum'}
df.resample('30min', closed='right', label='right').agg(agg)
您注意到在30分钟的时间范围内,第一个蜡烛仅由1个15分钟的蜡烛而不是2个蜡烛生成。
如何仅在计算的开始而不是结束时跳过未完成的蜡烛??我想相似地跳过1小时,等等
答案 0 :(得分:2)
IIUC,您可以这样做。将一个计数添加到您的聚合字典中,然后根据该计数过滤数据框,如下所示:
agg = { 'open': ['first','count'], 'high': 'max', 'low': 'min', 'close': 'last', 'volumeto': 'sum'}
df_out = df.resample('30min', closed='right', label='right').agg(agg)
df_out.columns = df_out.columns.map('_'.join)
df_out[df_out['open_count']>1]
输出:
open_first open_count high_max low_min close_last volumeto_sum
time
2018-06-26 04:00:00 6247.34 2 6257.61 6238.11 6239.83 4700074.31
2018-06-26 04:30:00 6239.83 2 6269.14 6232.14 6260.96 5775722.04
2018-06-26 05:00:00 6261.16 2 6284.27 6249.46 6263.73 7368807.50
2018-06-26 05:30:00 6263.73 2 6286.36 6263.59 6270.69 4449156.00
或者只消除第一个不完整的组
df_out[~(df_out['open_count'] < 2).cumprod().astype(bool)]
输出:
open_first open_count high_max low_min close_last volumeto_sum
time
2018-06-26 04:00:00 6247.34 2 6257.61 6238.11 6239.83 4700074.31
2018-06-26 04:30:00 6239.83 2 6269.14 6232.14 6260.96 5775722.04
2018-06-26 05:00:00 6261.16 2 6284.27 6249.46 6263.73 7368807.50
2018-06-26 05:30:00 6263.73 2 6286.36 6263.59 6270.69 4449156.00
2018-06-26 06:00:00 6271.75 1 6274.69 6259.29 6261.20 2448639.24