获取每个数据是星期几, 然后星期一到星期五的数据合并下。写个循环处理下不就可以了。
使用pandas将股票/期货中的日K线合成周K线,如果周五遇上国家节假日变成非交易日,如何将日期正确展示? 世上无难事 115 发布于 2019-09-09 问题描述: 有某个股票的多个日K线数据,数据格式为dataframe,通过groupby进行合成周K线,且以周五作为开始展示点. 假设今天的日期是2019-09-17,在下方代码print(_df.tail())输出的的2019-09-13,请问需要如何做才能生成2019-09-12? 模拟数据: import pandas as pd import numpy as np # A股交易日数组 dates = [ '2019-08-23', '2019-08-26', '2019-08-27', '2019-08-28', '2019-08-29', '2019-08-30', '2019-09-02', '2019-09-03', '2019-09-04', '2019-09-05', '2019-09-06', '2019-09-09', '2019-09-10', '2019-09-11', '2019-09-12', '2019-09-16', '2019-09-17' ] data = np.random.randint(low=1, high=5, size=[len(dates), 4]).tolist() df = pd.DataFrame(data, pd.to_datetime(dates), ['open', 'high', 'low', 'close']) # 合成K线 _df = df.groupby(pd.Grouper(freq='W-FRI')).agg(dict(open='first', high='max', low='min', close='last')) print(_df.tail()) 期待结果: 2019-08-23 2 2 4 1 2019-08-30 4 4 1 1 2019-09-06 4 3 2 4 2019-09-12 2 4 1 1 2019-09-17 4 4 2 2 实际输出: 2019-08-23 2 2 4 1 2019-08-30 4 4 1 1 2019-09-06 4 3 2 4 2019-09-13 2 4 1 1 2019-09-20 4 4 2 2 ********************* 自己想到了一种方法,感觉应该可以解决这个问题. import pandas as pd import numpy as np dates = [ '2019-08-23', '2019-08-26', '2019-08-27', '2019-08-28', '2019-08-29','2019-08-30', '2019-09-02', '2019-09-03', '2019-09-04', '2019-09-05', '2019-09-06', '2019-09-09', '2019-09-10', '2019-09-11', '2019-09-12', '2019-09-16', '2019-09-17' ] data = np.random.randint(low=1, high=5, size=[len(dates), 4]).tolist() df = pd.DataFrame(data, pd.to_datetime(dates), ['open', 'high', 'low', 'close']) df['date'] = dates print(df.tail(10)) # 这里是合成代码 _df = df.groupby(pd.Grouper(freq='W-FRI')).agg(dict(open='first', high='max', low='min', close='last', date='last')) _df.set_index('date', inplace=True) print(_df.tail()) 实际输出: 2019-08-23 2 1 4 4 2019-08-30 3 4 1 4 2019-09-06 3 4 1 3 2019-09-12 2 4 1 4 2019-09-17 3 4 1 1 ***************** pandas有个calender模块,可以自定义节假日,只要从上交所之类的网站或者wind把交易日日历爬出来就可以了。 获取每个数据是星期几, 然后星期一到星期五的数据合并下。写个循环处理下不就可以了。 目前是使用pandas做处理,用for循环不够优雅 |
|