Как узнать номер текущего рабочего дня с начала месяца по известной дате

В датафрейме pandas есть столбец в Datetime формате. Как красиво получить столбец WorkdayofMonth - номер рабочего дня текущего месяца:

Datatime            WorkdayofMonth 
2021-07-01 12:00:00    1
2021-07-01 15:00:00    1
2021-07-02 12:00:00    2
2021-07-02 15:00:00    2
2021-07-05 12:00:00    3
2021-07-05 15:00:00    3

Upd. Желательно с учетом праздников в Великобритании


Ответы (1 шт):

Автор решения: CrazyElf

Ну вот я набросал вам функцию WorkdayofMonth, к датафрейму думаю сами примените через apply:

# pip install workalendar

import datetime
from workalendar.europe import UnitedKingdom
cal = UnitedKingdom()

def IsWorkingDay(cal, dt):
    return dt.weekday() < 5 and not cal.is_holiday(dt)

def WorkdayofMonth(cal, dt):
    return sum(IsWorkingDay(cal, datetime.date(dt.year, dt.month, day)) for day in range(1, dt.day+1))

print(WorkdayofMonth(cal, datetime.date(2021, 7, 1)))
print(WorkdayofMonth(cal, datetime.date(2021, 7, 2)))
print(WorkdayofMonth(cal, datetime.date(2021, 7, 5)))
print(WorkdayofMonth(cal, datetime.date(2021, 1, 4))) # проверка и выходных и праздника

Вывод:

1
2
3
1
→ Ссылка