为了方便大家观察,把这段时间的日历附在下面,'2018-07-02'正好是星期一。

转换的思路是这样的,以日历中的周进行聚合,如'20180702'-'20180708',取该周期内,日线开盘价的第一个值作为周开盘价,日线最高价的最大值作为周最高价,日线最低价的最小值作为周最低价,日线收盘价的最后一个值作为周最收盘价,日线最高价的最大值作为周最高价,日线成交量的求和作为周成交量(手),如下图黄色方框所示。

我们可以通过.resample()【4】方法实现上述操作,对DataFrame和Series都适用。其中,参数rule设置需要转换成的频率,'1W'是一周。
具体转换的代码如下,日期默认为本周的星期日,如果周期内数据不全,如'20180722'这周只有3行数据,也会按照上述方法进行转换。
- freq = '1W'
- df_weekly = df[['open']].resample(rule=freq).first()
- df_weekly['high'] = df['high'].resample(rule=freq).max()
- df_weekly['low'] = df['low'].resample(rule=freq).min()
- df_weekly['close'] = df['close'].resample(rule=freq).last()
- df_weekly['vol'] = df['vol'].resample(rule=freq).sum()
-
- df_weekly
-
- Out[33]:
- open high low close vol
- trade_date
- 2018-07-08 9.05 9.05 8.45 8.66 5125563.53
- 2018-07-15 8.69 9.03 8.58 8.88 4901983.84
- 2018-07-22 8.85 8.90 8.66 8.70 1590354.68
升采样:以周线数据转换日线数据为例。继续使用上面刚刚转换好的周线数据,我们再试着把它转换成日线数据。先通过.resample('D').asfreq()【5】方法,将周线数据的频率转换成日线,效果如下。
- df_daily = df_weekly.resample('D').asfreq()
- print(df_daily)
-
- Out[52]:
- open high low close vol
- trade_date
- 2018-07-08 9.05 9.05 8.45 8.66 5125563.53
- 2018-07-09 NaN NaN NaN NaN NaN
- 2018-07-10 NaN NaN NaN NaN NaN
- 2018-07-11 NaN NaN NaN NaN NaN
- 2018-07-12 NaN NaN NaN NaN NaN
- 2018-07-13 NaN NaN NaN NaN NaN
- 2018-07-14 NaN NaN NaN NaN NaN
- 2018-07-15 8.69 9.03 8.58 8.88 4901983.84
- 2018-07-16 NaN NaN NaN NaN NaN
- 2018-07-17 NaN NaN NaN NaN NaN
- 2018-07-18 NaN NaN NaN NaN NaN
- 2018-07-19 NaN NaN NaN NaN NaN
- 2018-07-20 NaN NaN NaN NaN NaN
- 2018-07-21 NaN NaN NaN NaN NaN
- 2018-07-22 8.85 8.90 8.66 8.70 1590354.68
结果中出现了很多空值,需要我们按照一定的方法进行填充,可以通过添加.ffill()或者.bfill()实现。 (编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|