试图使用pandas.tseries.holidays类定义一组规则,但无法弄清楚如何仅基于另一条规则创建规则。我有下面的规则,但是想要创建另一个规则,它可以在一个工作日内抵消原来的规则:
感恩节:
Holiday("Thanksgiving Day", month=11, day=1, offset=pd.DateOffset(weekday=TH(4))),
黑色星期五:
Holiday("Thanksgiving Day", month=11, day=1,
offset=pd.DateOffset(weekday=TH(4))) + pd.DateOffset(1),同样,试图为网络星期一创造规则,也就是感恩节之后的星期一。尝试了下面的内容,但是这个返回11-2。
Holiday("Thanksgiving Day", month=11, day=1,
offset=pd.DateOffset(weekday=TH(4)), observance=next_monday)但是上面的话不会回来的
TypeError:添加操作不受支持的类型
发布于 2018-11-25 23:58:13
使用最新的pandas 0.23.4,现在很容易做到这一点。
import pandas as pd
from pandas.tseries.offsets import Day
from dateutil.relativedelta import TH
BlackFriday = Holiday("Black Friday", month=11, day=1,
offset=[pd.DateOffset(weekday=TH(4)), Day(1)])发布于 2015-05-27 15:36:17
我不相信你能指定其他假期的节假日。但是,在您的情况下,我们可以定义符合您要求的假期。既然感恩节是第四个星期四,那么BlackFriday是第四个星期五,CyberMonday是第四个星期六(下个星期一)。感恩节的最新日期是11月28日,所以星期六是11月30日,“假日”将在12月2日举行。
from pandas.tseries.holiday import Holiday, TH, FR, SA, next_monday
Holiday("Black Friday", month=11, day=1, offset=pd.DateOffset(weekday=FR(4)))
Holiday("CyberMonday", month=11, day=1, offset=pd.DateOffset(weekday=SA(4)),
observance=next_monday)发布于 2016-04-25 11:15:31
现在,在相同的假日规则中不可能同时定义偏移参数和遵守参数。
我在英国的节礼日发现了这个问题。节礼日是圣诞节之后的下一个工作日。
我使用指向适当规则的遵守参数编写了解决方案,在本例中是: after_nearest_workday
Holiday('Christmas', month=12, day=25, observance=nearest_workday),
Holiday('Boxing Day', month=12, day=25, observance=after_nearest_workday)after_nearest_workday是一个函数。如果需要另一个遵守规则,您可以创建自己的函数,如以下原始Pandas遵守函数:
def nearest_workday(dt):
"""
If holiday falls on Saturday, use day before (Friday) instead;
if holiday falls on Sunday, use day thereafter (Monday) instead.
"""
if dt.weekday() == 5:
return dt - timedelta(1)
elif dt.weekday() == 6:
return dt + timedelta(1)
return dt
def after_nearest_workday(dt):
"""
returns next workday after nearest workday
needed for Boxing day or multiple holidays in a series
"""
return next_workday(nearest_workday(dt))https://stackoverflow.com/questions/30485984
复制相似问题