【问题标题】:Custom holiday observance in Pandas tseries HolidayPandas tseries Holiday 中的自定义节日庆祝活动
【发布时间】:2019-12-27 12:34:41
【问题描述】:

我想创建一个圣诞节和后天假期的类,但是遇到了一个问题。有三分之一的特殊情况我无法完全解决。

案例1:圣诞节是星期五,假期是星期五(12-25)和星期六(12-26)(已解决)。这个案例发生在2020年

案例2:圣诞节是星期六,假期是星期六(12-25)和星期一(12-27)(已解决)。此案发生在 2021 年

案例3:圣诞节是星期日,假期是星期一(12-26)和星期二(12-27)(未解决)。这个案例发生在2016年

如果observance= monday_to_tuesday 可用,则案例 3 可以解决,但遗憾的是它不是,这就是我在这里寻求帮助的原因,因为 pandas tseries user guide 没有说任何关于创建自定义纪念或任何关于从任何工作日开始遵守的情况。

我正在学习的课程如下:


from pandas.tseries.holiday import Holiday, sunday_to_monday, AbstractHolidayCalendar

import pandas as pd
import datetime as dt

class MyHolidays(AbstractHolidayCalendar):
    rules = [Holiday('Christmas',month=12,day=25, observance= sunday_to_monday),
             Holiday('Boxingday',month=12,day=26, observance= sunday_to_monday)]

cal= MyHolidays()

if __name__ == '__main__':
    myholidays =cal.holidays(start = dt.datetime(2016,1,1), end=dt.datetime(2021,12,31))
    temp_s = pd.Series(myholidays)
    print(temp_s)

有什么办法可以解决我的问题吗?提前谢谢你

【问题讨论】:

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


    【解决方案1】:

    您可以在existing ones 之后滚动您自己的遵守功能。它们只是常规的 Python 函数,因此您也可以使用 lambda,如下所示:

    from pandas.tseries.holiday import Holiday, sunday_to_monday, AbstractHolidayCalendar
    
    import pandas as pd
    import datetime as dt
    
    class MyHolidays(AbstractHolidayCalendar):
        rules = [Holiday('Christmas',month=12,day=25, observance= sunday_to_monday),
                 Holiday('Boxingday',month=12,day=26, observance= lambda d: d + dt.timedelta(1) if d.weekday() == 0 or d.weekday() == 6 else d )]
    
    cal= MyHolidays()
    
    if __name__ == '__main__':
        myholidays =cal.holidays(start = dt.datetime(2016,1,1), end=dt.datetime(2021,12,31))
        temp_s = pd.Series(myholidays)
        print(temp_s)
    

    输出:

    0    2016-12-26
    1    2016-12-27
    2    2017-12-25
    3    2017-12-26
    4    2018-12-25
    5    2018-12-26
    6    2019-12-25
    7    2019-12-26
    8    2020-12-25
    9    2020-12-26
    10   2021-12-25
    11   2021-12-27
    

    【讨论】:

    • 看了你链接的github代码,不知道如何深入研究pandas等流行模块的源代码?
    • 您可以在线浏览或 git clone 到您的计算机上。通常,可以从 pypi.org 的项目链接中找到源代码。 Python 本身也在github
    猜你喜欢
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 2021-01-20
    • 2022-12-02
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多