将OHLC数据的pandas DataFrame重新采样为三天的条形,忽略了周末

时间:2018-12-31 05:56:35

标签: python-3.x pandas python-datetime

我有每日价格数据,开盘价,最高价,最低价,收盘价和日期为指数。我想创建三天的酒吧,但我希望酒吧“在周末结束”,以便最终得到MTuW,TuWTh,WThF,ThFM和FMTu酒吧。

(MTuW =星期一,星期二,星期三)

(FMTu =星期五星期一,星期二)

(FSaSu =周五周六周日)

我尝试了

df = df.asfreq('B')
df = df.resample('3D').mean()

但这似乎仅适用于MTuW,TuWTh和WThF条。其他酒吧似乎并没有跳过周末,这意味着要成为FMTu酒吧实际上是FSaSu酒吧,或更准确地说,是星期五酒吧。

我相信有一种方法可以使这项工作

from pandas.tseries.offsets import BDay

但是我不清楚如何使它工作。

1 个答案:

答案 0 :(得分:1)

我没有对此进行测试,但我认为您只需要使用:

df = df.resample('3B').mean()

更新

要同时适应假期,请使用自定义规则进行重新采样:

from pandas.tseries.offsets import CustomBusinessDay
from pandas.tseries.holiday import USFederalHolidayCalendar

bday_us = CustomBusinessDay(calendar=USFederalHolidayCalendar())

df = df.resample(bday_us).mean()

我在这里使用了USFederalHolidayCalendar。要获得此类假期课程的假期概述,请执行以下操作:

>>> pprint(USFederalHolidayCalendar().rules)
[Holiday: New Years Day (month=1, day=1, observance=<function nearest_workday at 0x10db3ce18>),
 Holiday: Dr. Martin Luther King Jr. (month=1, day=1, offset=<DateOffset: weekday=MO(+3)>),
 Holiday: Presidents Day (month=2, day=1, offset=<DateOffset: weekday=MO(+3)>),
 Holiday: MemorialDay (month=5, day=31, offset=<DateOffset: weekday=MO(-1)>),
 Holiday: July 4th (month=7, day=4, observance=<function nearest_workday at 0x10db3ce18>),
 Holiday: Labor Day (month=9, day=1, offset=<DateOffset: weekday=MO(+1)>),
 Holiday: Columbus Day (month=10, day=1, offset=<DateOffset: weekday=MO(+2)>),
 Holiday: Veterans Day (month=11, day=11, observance=<function nearest_workday at 0x10db3ce18>),
 Holiday: Thanksgiving (month=11, day=1, offset=<DateOffset: weekday=TH(+4)>),
 Holiday: Christmas (month=12, day=25, observance=<function nearest_workday at 0x10db3ce18>)]

显然,这样的假日对象也可以自定义并从头开始构建。有关假期课程的更多信息:https://pandas.pydata.org/pandas-docs/stable/timeseries.html#holidays-holiday-calendars