gpt4 book ai didi

python - Pandas tseries Holiday 中的自定义节日庆祝事件

转载 作者:行者123 更新时间:2023-12-01 07:22:51 24 4
gpt4 key购买 nike

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

案例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没有提及创建自定义纪念事件或任何工作日的纪念事件的情况。

我正在处理的类(class)如下:

<小时/>
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)

有办法解决我的问题吗?预先感谢您

最佳答案

您可以按照 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

关于python - Pandas tseries Holiday 中的自定义节日庆祝事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57605034/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com