从给定的工作日和月份计算日期,但年份可变(例如,“ x”年中的8月的第3个星期日)

时间:2020-02-01 23:17:33

标签: python pandas datetime calendar

我的熊猫数据框“ MSYs”具有一个“ start_yr”变量,该变量是从显示某人开始日期的年份的“日期时间”列中构建的(请注意,“开始日期”的月份和日期也有所不同)。

{{1}}

我想使用start_yr帮助我在另一个列“ Grant Start”中返回日期时间日期,该列显示了该可变年份的八月的第三个星期日。我很沮丧。

1 个答案:

答案 0 :(得分:0)

这是对可能帮助您的类似问题的解答。

使用日期时间库。

浏览那年八月的几天子集。

检查是否是星期四。

Python: third Friday of a month

这是基于该线程中答案之一的解决方案。这是一种通用的解决方案,因此您应该可以选择一个月,一周中的一天以及想要的月份中的数字,并获得该日期。

注意:从星期一开始,工作日的索引为0。因此,星期日的索引为6,星期一的索引为0。因此,当您将day_of_week输入此函数时,请确保选择0到6之间的数字。

我默认将其选择为给定年份的月份的第三个星期日。

import datetime as dt

def get_year_day(year,month=8,day_of_week=6,num_in_month=3):
    ## set up possible ranges
    range_1 = 7*(num_in_month-1)+1
    range_2 = 7*num_in_month+1
    ## loop through possible range in the year and the month
    for i in range(range_1,range_2):
        date = dt.datetime(year=year,month=month, day=i)
        ## if we have our weekday we can break
        if date.weekday()==day_of_week:
            break
    return date

for i in range(2015,2021):

    print(i,get_year_day(i))

2015 2015-08-16 00:00:00
2016 2016-08-21 00:00:00
2017 2017-08-20 00:00:00
2018 2018-08-19 00:00:00
2019 2019-08-18 00:00:00
2020 2020-08-16 00:00:00