我试图找出一种方法,在两个日期之间生成每周的第一个和最后一个工作日,例如2016-01-01
和2017-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
因此,基本上,您可以将日历与我们的假日一起导入,创建所需的日期范围,根据日历分割日期范围,然后去掉周六和周日,然后循环遍历,并返回日期范围中每个星期的开始和结束。
希望有帮助!