繁体   English   中英

在 Pandas.tseries AbstractHolidayCalendar 中添加一系列日期作为一个假期规则,而不仅仅是一个日期?

[英]Adding a range of dates as one holiday rule, instead of just a single date, in Pandas.tseries AbstractHolidayCalendar?

我正在编写一个 Python 脚本,根据自定义假日日历将给定的开始日期偏移 X 个工作日。 Pandas.tseries 似乎是个不错的选择。

在构建我的通用假期日历时,我遇到了将单个日期添加到假期规则的示例。

例子:

import pandas as pd

from pandas.tseries.holiday import AbstractHolidayCalendar, Holiday, Easter
from pandas.tseries.offsets import Day


class myCalendar(AbstractHolidayCalendar):
   rules = [
      Holiday('Off-day during Easter', month=1, day=1, offset=[Easter(), Day(-2)]),
      Holiday('Christmas Day', month=12, day=25)
   ]

像这样使用 function 时:

def offset_date(start, offset):
    return start + pd.offsets.CustomBusinessDay(n=offset, calendar=myCalendar())

规则中的日期将按预期跳过。

但是我现在想在给定的起始偏移量的情况下向规则集添加 3 整周,21 天,而不是编写 21 条规则行来实现相同的目的?

我想知道你们是否知道是否有可能创建一个将 21 天添加到规则集的单行程序?

这是一种使用列表推导来实现它的方法,它使它保持简短和可读:

class myCalendar(AbstractHolidayCalendar):
    rules = [
        Holiday("Off-day during Easter", month=1, day=1, offset=[Easter(), Day(-2)]),
        Holiday("Christmas Day", month=12, day=25),
        Holiday("Christmas Day", month=12, day=25),
    ] + [Holiday("Ski days", month=2, day=x) for x in range(1, 22)]

在这里,从 2 月 1 日开始的 21 天休息期被添加到规则集中。

以便:

print(offset_date(pd.to_datetime("2023-01-31"), 1))
# 2023-02-22 00:00:00 as expected

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM