我试图找出一种方法,在两个日期之间生成每周的第一个和最后一个工作日,例如2016-01-012017-02-28
考虑到我们有很多周的长周末从Friday开始或延长到Monday,找到所有周一和周五的日期不是一个工作逻辑。如果Monday是假日,Tuesday将是第一个营业日,如果Friday是假日,Thursday将是最后一个营业日。
我可以使用pandas date_range函数生成两个日期之间的所有日期,但除此之外,我似乎无法计算。

最佳答案

您好这段代码应该可以解决这个问题:

import pandas as pd
from pandas.tseries.holiday import USFederalHolidayCalendar

dr = pd.date_range(start='2016-01-01', end='2017-02-28')
cal = USFederalHolidayCalendar()
holidays = cal.holidays(start=dr.min(), end=dr.max())
A = dr[~dr.isin(holidays)]  # make sure its not US holiday
B = A[A.weekday != 5]    # make sure its not saturday
B = B[B.weekday != 6]    # make sure its not saturday

for year in set(B.year):    # for every year in your range
    tmp = B[B.year == year] # slice it year wise
    for week in set(tmp.week):  # for each week in slice
        temp = tmp[tmp.week == week]
        print(temp[temp.weekday == temp.weekday.min()])     # begining of week
        print(temp[temp.weekday == temp.weekday.max()])     # ending of week

因此,基本上,您可以将日历与我们的假日一起导入,创建所需的日期范围,根据日历分割日期范围,然后去掉周六和周日,然后循环遍历,并返回日期范围中每个星期的开始和结束。
希望有帮助!

10-07 19:00
查看更多