我有一个熊猫系列的股票收盘价,显示如下:
closingprice [DATE1]
DATE1
> 1/3/2017 151.732605
1/9/2017 152.910522
1/27/2017 153.945938
> 2/23/2017 167.495438
3/6/2017 158.808716
3/9/2017 157.894333
> 3/10/2017 157.513321
3/13/2017 156.7323
3/21/2017 158.856354
> 3/24/2017 158.132462
4/3/2017 158.780151
4/12/2017 162.085281
我需要查看30天后的收盘价,例如,我有2017-01-03,我需要有2017-02-02的收盘价。所以我做了:
date2 = date1 + pd.DateOffset(days = 30)我有新服务,如下所示:
closingprice [DATE2]
> 2/2/2017 159.731018
2/8/2017 160.418427
2/26/2017 NaN
3/25/2017 NaN
> 4/5/2017 159.065903
4/8/2017 NaN
4/9/2017 NaN
正如您所看到的,某些日期不是在营业日期,而是以NaN的形式提供给我。如果是这种情况,如果周末或假日30天,我如何获得下一个营业日期价格?例如:2月26日南方需要更换到2月27日的收盘价。
一个技巧是每个日期添加30天,然后在每个日期添加零BusinessDay
s。
from pandas.tseries.offsets import BDay
date2 = date1 + pd.DateOffset(days=30) # some of these dates may fall on weekends
date3 = date2 + 0*BDay() # this nudges any weekend dates to the next occurring Monday
这不会影响工作日,但会将周末日期转换为下周日发生的日期。 (请注意,在这种情况下,“营业日”仅指周一至周五,没有任何类型的假期。)
资料来源:@ phil_20686对这个问题的回答:Pandas offset DatetimeIndex to next business if date is not a business day