Вычислить дату с заданным днем ​​недели и месяцем, но с переменным годом (например, 3-е воскресенье августа в "x" году) - PullRequest
0 голосов
/ 02 февраля 2020

Мой pandas фрейм данных "MSYs" имеет переменную "start_yr", построенную из столбца даты и времени "Дата начала", показывающего год чьей-либо даты начала (обратите внимание, что месяц и день "даты начала" также различаются).

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

Я хочу использовать start_yr, чтобы помочь мне возвратить дату и время в другом столбце «Начало гранта», показывая третье воскресенье августа этого переменного года. Я в тупике.

1 Ответ

0 голосов
/ 02 февраля 2020

Это ответ на аналогичный вопрос, который может вам помочь.

Используйте библиотеку даты и времени.

L oop через подмножество дней в августе этого года.

Проверьте, если это четверг.

Python: третья пятница месяца

Вот решение, основанное на одном из ответов в этой теме , Это обобщенное решение, поэтому вы должны иметь возможность выбрать месяц, день недели и номер нужного месяца и получить эту дату.

Примечание. Дни недели индексируются 0, начиная с понедельника. Таким образом, индекс воскресенья равен 6, а индекс понедельника равен 0. Поэтому, когда вы вводите day_of_week в эту функцию, убедитесь, что вы выбираете числа от 0 до 6.

Я по умолчанию выбрал 3-е воскресенье месяца, учитывая год.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...