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

Python 从给定的工作日和月份计算日期,但年份可变(例如“x”年中8月的第三个星期日),python,pandas,datetime,calendar,Python,Pandas,Datetime,Calendar,My pandas数据框“MSYs”有一个“start_yr”变量,该变量是从日期时间列“start Date”构建的,该列显示某人的开始日期的年份(请注意,“start Date”的月份和日期也会有所不同) start\u yr=pd.DatetimeIndex(MSYs['start Date'])。年 我想使用start_yr帮助我在另一列“Grant start”中返回日期时间日期,该列显示该可变年份8月的第三个星期日。我被难住了。这是一个类似问题的答案,可能会对你有所帮助 使用date

My pandas数据框“MSYs”有一个“start_yr”变量,该变量是从日期时间列“start Date”构建的,该列显示某人的开始日期的年份(请注意,“start Date”的月份和日期也会有所不同)

start\u yr=pd.DatetimeIndex(MSYs['start Date'])。年


我想使用start_yr帮助我在另一列“Grant start”中返回日期时间日期,该列显示该可变年份8月的第三个星期日。我被难住了。

这是一个类似问题的答案,可能会对你有所帮助

使用datetime库

循环查看当年8月份的天数子集

看看是不是星期四

下面是一个基于该线程中的一个答案的解决方案。这是一个通用的解决方案,所以你应该能够选择一个月,一周中的一天,以及你想要的月份的数字,并获得该日期

注意:从星期一开始,周天数为0。所以周日的指数是6,周一的指数是0。因此,当您将周中的天输入此函数时,请确保选择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


我试图从静态月份和月份的工作日返回一个日期,而不是计算给定的日期。在所有其他帮助中,给出日期;例如,我希望生成日期。我需要能够告诉系统,仅基于年份,我想要8月的第三个完整星期日,并返回一个日期。@Hudson。我已经添加了基于我链接的线程的解决方案。让我知道它是否对你有效。这就是它——太棒了,非常感谢你!我还想到尝试一些date_系列的魔法,但还没有探索。