Pandas假日套餐黑色星期五假期

2024-04-25 08:05:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用holidays软件包构建我的日历假日日历,并对“黑色星期五”(感恩节后的第二天)进行了调整。总是一个星期五),11月的第4周相对增量,适用于2018年和2020年,但今年是11月的第5周,这将使我的设置无效

有没有更好的方法来确保这个值总是在感恩节后的星期五下降?我不确定是否最好使用假期包列表中的假期,并使用一些神奇的熊猫抵消基于这些值和设置假期,或者是否有一个更好的日期操作方法来实现这一点。你知道吗

这是我的方法:

self.append({datetime.date(datetime(year, 11, 1) + relativedelta(weekday=FR(+4))) : "Black Friday"}) # Adding Black Friday

以下是完整代码:

import pandas as pd
import numpy as np
import calendar as cal
from datetime import *
from dateutil.relativedelta import *
import holidays

class CorporateHolidays(holidays.UnitedStates):
    def _populate(self, year):
        print(self)
        # Populate the holiday list with the default US holidays
        holidays.UnitedStates._populate(self, year)
        # Remove Holiday Date(s)
        self.pop(datetime.date(datetime(year, 10, 1) + relativedelta(weekday=MO(+2))), None) # Removing Columbus Day
        # Add Holiday Date(s)
        self.append({datetime.date(datetime(year, 12, 24)) : "Christmas Eve"})
        self.append({datetime.date(datetime(year, 12, 31)) : "New Years Eve"})
        self.append({datetime.date(datetime(year, 11, 1) + relativedelta(weekday=FR(+4))) : "Black Friday"}) # Adding Black Friday

其中print(self)呈现列表:

{datetime.date(2018, 1, 1): "New Year's Day", datetime.date(2018, 1, 15): 'Martin Luther King, Jr. Day', datetime.date(2018, 2, 19): "Washington's Birthday", datetime.date(2018, 5, 28): 'Memorial Day', datetime.date(2018, 7, 4): 'Independence Day', datetime.date(2018, 9, 3): 'Labor Day', datetime.date(2018, 11, 11): 'Veterans Day', datetime.date(2018, 11, 12): 'Veterans Day (Observed)', datetime.date(2018, 11, 22): 'Thanksgiving', datetime.date(2018, 12, 25): 'Christmas Day', datetime.date(2018, 12, 24): 'Christmas Eve', datetime.date(2018, 12, 31): 'New Years Eve', datetime.date(2018, 11, 23): 'Black Friday'}....

Tags: importselfdatetimedateasholidayseveyear
1条回答
网友
1楼 · 发布于 2024-04-25 08:05:13

感恩节(根据维基百科)总是11月的第四个星期四。如果这个月从星期五开始,这会给你带来麻烦。所以不要用第四个星期五,试着用第四个星期四,加上最后一天,使之成为星期五。像这样的

datetime.date(datetime(year, 11, 1) + relativedelta(weekday=TH(+4)) + timedelta(days=1))

In [5]: datetime.date(datetime(2018, 11, 1) + relativedelta(weekday=TH(+4)) + timedelta(days=1))                                                                                                            
Out[5]: datetime.date(2018, 11, 23)

In [6]: datetime.date(datetime(2019, 11, 1) + relativedelta(weekday=TH(+4)) + timedelta(days=1))                                                                                                            
Out[6]: datetime.date(2019, 11, 29)

我应该做的

相关问题 更多 >