Вывести номера недель (год) в каждом периоде (месяц)
Есть цикл который выводит номера недель каждого месяца нужное количество раз. И вот если к примеру, мы выберем начало недели - понедельник freq='W-MON', а месяц начинается не в понедельник. то цикл выводит номера недель с ПЕРВОГО ПОНЕДЕЛЬНИКА месяца, а нужно с номера недели куда попадает 01 число. К примеру декабрь 2021г. начинается в среду - 48 неделя, НО цикл первой печатает 49 неделю, с 06.12.2021. - Это логично. Но мне нужно что бы он показывал номер недели относящийся к промежуточным неделям. т.е что бы в декабре 2021 вывод начался с 48 неделе.
# количество повторений
n_repeat = 1
# полученный период
month_year = '11.2021'
month_year = '01.' + str(month_year)
month_year = datetime.strptime(month_year, '%d.%m.%Y')
# Получаем первый и последний день месяца отчета
first_day = pd.to_datetime(month_year).replace(day=1)
last_day = (pd.to_datetime(first_day) + pd.offsets.MonthEnd()).date()
for dt in pd.date_range(start=first_day, end = last_day, freq='W-MON').repeat(n_repeat).sort_values():
datss = dt.date()
print(datss.strftime('%W'))
print(datss)#.strftime('%W')
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Если я правильно понял вопрос:
In [62]: n_repeat = 2
In [63]: for d in pd.date_range(first_day, first_day + pd.offsets.MonthEnd(), freq="7D").repeat(n_repeat):
...: print(f"date: {d:%Y-%m-%d}, week: {d.isocalendar()[1]}")
...:
date: 2021-11-01, week: 44
date: 2021-11-01, week: 44
date: 2021-11-08, week: 45
date: 2021-11-08, week: 45
date: 2021-11-15, week: 46
date: 2021-11-15, week: 46
date: 2021-11-22, week: 47
date: 2021-11-22, week: 47
date: 2021-11-29, week: 48
date: 2021-11-29, week: 48
Декабрь 2021:
In [64]: first_day = pd.to_datetime("2021-12-01")
In [65]: for d in pd.date_range(first_day, first_day + pd.offsets.MonthEnd(), freq="7D").repeat(n_repeat):
...: print(f"date: {d:%Y-%m-%d}, week: {d.isocalendar()[1]}")
...:
date: 2021-12-01, week: 48
date: 2021-12-01, week: 48
date: 2021-12-08, week: 49
date: 2021-12-08, week: 49
date: 2021-12-15, week: 50
date: 2021-12-15, week: 50
date: 2021-12-22, week: 51
date: 2021-12-22, week: 51
date: 2021-12-29, week: 52
date: 2021-12-29, week: 52