【问题标题】:Calculate date from given weekday and month, but variable year (e.g. 3rd Sunday in August in "x" year)从给定的工作日和月份计算日期,但年份可变(例如,“x”年中 8 月的第三个星期日)
【发布时间】:2020-02-01 23:17:33
【问题描述】:

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

start_yr = pd.DatetimeIndex(MSYs['Start Date']).year

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

【问题讨论】:

    标签: python pandas datetime calendar


    【解决方案1】:

    这是对类似问题的回答,可能会对您有所帮助。

    使用日期时间库。

    循环浏览当年 8 月的几天。

    检查是否是星期四。

    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
    
    

    【讨论】:

    • 我正在尝试从静态月份和工作日返回日期,而不是评估给定日期。在所有其他帮助中,都给出了日期;对于我的示例,我正在寻找生成日期。
    • 我需要能够告诉系统我想要基于年份的八月第三个完整的星期日,并返回一个日期。
    • @HudsonH。我已经根据我链接的线程添加了解决方案。让我知道它是否适合您。
    • 这就是它——太棒了,非常感谢!我还想到尝试使用 date_range 进行一些魔术,但尚未探索。
    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2018-07-14
    • 1970-01-01
    相关资源
    最近更新 更多