Python 忽略周末,将OHLC数据的数据帧重新采样为三天条形图

Python 忽略周末,将OHLC数据的数据帧重新采样为三天条形图,python,python-3.x,pandas,python-datetime,Python,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酒

我有每日价格数据,以开盘、高点、低点、收盘和日期为指数。我想创建三天的酒吧,但我想让酒吧“环绕周末”,这样我就有了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

但我不清楚如何让它工作。

我没有测试这个,但我认为您只需要使用:

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>)]
>>pprint(USFederalHolidayCalendar().rules)
[假日:元旦日(月=1,日=1,纪念日=),
假日:马丁·路德·金博士(月=1,日=1,偏移量=),
假日:总统日(月=2,日=1,偏移量=),
假日:纪念日(月=5,日=31,偏移量=),
假日:7月4日(月=7日,日=4日,纪念日=),
假日:劳动节(月=9,日=1,抵销=),
假日:哥伦布日(月=10,日=1,偏移量=),
节日:退伍军人节(月=11,日=11,纪念日=),
假日:感恩节(月=11日,日=1日,偏移量=),
假日:圣诞节(月=12,日=25,纪念日=)]

显然,这样的度假对象也可以定制,从头开始构建。关于假日课程的更多信息:

想分享一些示例数据吗?你的代码看起来很好。这是简单而优雅的,非常感谢!不过,一个问题是,它跳过了周末,但并没有跳过交易假期。例如,没有2018年1月15日星期一(马丁·路德·金日)的数据,但我的三天条形图(包括当天)只包括两个交易日和空日。我相信这一认识改变了我的问题。我需要通过每三个数据条分组来重新采样,忽略星期几。在评论中回答这个问题容易吗?还是我应该问一个新问题?更新了我的答案。看起来对于您的具体情况,您可以使用
df=df.resample(3*bday\u us.mean()
)。你能证实这一点吗?