Python 如果发生以下情况,如何获得最后10个工作日

Python 如果发生以下情况,如何获得最后10个工作日,python,pandas,Python,Pandas,我想根据过去10个工作日创建dataframe。还应检查当天是否为公共假日。 我有一份公共假日的清单 公众假期名单如下: 假日 2021-01-26 2021-03-11 2021-03-29 2021-04-02 2021-04-14 2021-04-21 2021-05-13 2021-07-21 2021-08-19 2021-09-10 2021-10-15 2021-11-04 2021-11-05 2021-11-19 我没有测试这段代码,但它应该可以工作 import dateti

我想根据过去10个工作日创建dataframe。还应检查当天是否为公共假日。 我有一份公共假日的清单

公众假期名单如下:

假日 2021-01-26 2021-03-11 2021-03-29 2021-04-02 2021-04-14 2021-04-21 2021-05-13 2021-07-21 2021-08-19 2021-09-10 2021-10-15 2021-11-04 2021-11-05 2021-11-19
我没有测试这段代码,但它应该可以工作

import datetime 
today = datetime.datetime.now()
business_days = []
#holidays = [ your list of holidays in here ] 

i = 0
while True:
    temp_date = today - datetime.timedelta(i)
    if temp_date.weekday() in (0,1,2,3,4) and temp_date not in holidays:
        if len(business_days)<10:
            business_days.append(temp_date) 
        else:
            break      
    i += 1
    
print(business days) 
导入日期时间
今天=datetime.datetime.now()
营业日=[]
#假期=[您在此列出的假期]
i=0
尽管如此:
temp_date=今天-datetime.timedelta(i)
如果临时工作日()在(0,1,2,3,4)中,而临时工作日不在节假日中:

如果len(business_days)我没有测试此代码,但它应该可以工作

import datetime 
today = datetime.datetime.now()
business_days = []
#holidays = [ your list of holidays in here ] 

i = 0
while True:
    temp_date = today - datetime.timedelta(i)
    if temp_date.weekday() in (0,1,2,3,4) and temp_date not in holidays:
        if len(business_days)<10:
            business_days.append(temp_date) 
        else:
            break      
    i += 1
    
print(business days) 
导入日期时间
今天=datetime.datetime.now()
营业日=[]
#假期=[您在此列出的假期]
i=0
尽管如此:
temp_date=今天-datetime.timedelta(i)
如果临时工作日()在(0,1,2,3,4)中,而临时工作日不在节假日中:

如果len(工作日)您可以使用pandas内置功能

在你的情况下,它将是


作为pd进口熊猫
今天='2021-02-27'
营业日=pd.日期\范围(end='2021-02-27',期间=14,频率='D')。至\系列()
businessDays=businessDays[businessDays.dt.dayofweek<5]
打印(工作日)
输出如下:

2021-02-15
2021-02-16 
2021-02-17 
2021-02-18
2021-02-19
2021-02-22
2021-02-23
2021-02-24
2021-02-25
2021-02-26

您可以使用内置函数

在你的情况下,它将是


作为pd进口熊猫
今天='2021-02-27'
营业日=pd.日期\范围(end='2021-02-27',期间=14,频率='D')。至\系列()
businessDays=businessDays[businessDays.dt.dayofweek<5]
打印(工作日)
输出如下:

2021-02-15
2021-02-16 
2021-02-17 
2021-02-18
2021-02-19
2021-02-22
2021-02-23
2021-02-24
2021-02-25
2021-02-26

@pi_pascal的替代方案:

hols = ["2021-01-26", "2021-03-11", "2021-03-29", "2021-04-02",
        "2021-04-14", "2021-04-21", "2021-05-13", "2021-07-21",
        "2021-08-19", "2021-09-10", "2021-10-15", "2021-11-04",
        "2021-11-05", "2021-11-19"]
hols = pd.to_datetime(hols)

bdays = pd.bdate_range(end=pd.Timestamp.today(), periods=60, freq="1D", closed="left")
bdays = bdays[bdays.weekday < 5].difference(hols)[-10:]

@pi_pascal的替代方案:

hols = ["2021-01-26", "2021-03-11", "2021-03-29", "2021-04-02",
        "2021-04-14", "2021-04-21", "2021-05-13", "2021-07-21",
        "2021-08-19", "2021-09-10", "2021-10-15", "2021-11-04",
        "2021-11-05", "2021-11-19"]
hols = pd.to_datetime(hols)

bdays = pd.bdate_range(end=pd.Timestamp.today(), periods=60, freq="1D", closed="left")
bdays = bdays[bdays.weekday < 5].difference(hols)[-10:]

假日列表是否存储在dataframe列中?如果是,列的数据类型是什么?它是日期时间。假日列表是否存储在dataframe列中?如果是的话,该列的数据类型是什么?它是datetime。谢谢。代码给出了未定义的错误dti。你能帮我解决什么问题吗!我编辑了答案。关于
periods=60
:60的精度是一个任意数字,但这个数字必须足以在删除周末和节假日后保留10天。谢谢。代码给出了未定义的错误dti。你能帮我解决什么问题吗!我编辑了答案。关于
periods=60
:60的精度是一个任意数字,但这个数字必须足以在周末和节假日后保留10天。