Как получить номер недели, начиная с понедельника данного месяца в python?

Я пытался рассчитать номер недели, начиная с первого понедельника октября. Есть ли какие-либо функции в pandas или datetime для эффективного расчета?

MWE

import pandas as pd
from datetime import date,datetime

df = pd.DataFrame({'date': pd.date_range('2021-10-01','2022-11-01',freq='1D')})
df['day_name'] = df['date'].dt.day_name()

df2 = df.head()
df2['Fiscal_Week'] = [52,52,52,1,1] # 2021-10-4 is monday, so for oct4, week is 1
# How to do it programatically for any year?

df2
    date        day_name Fiscal_Week
0   2021-10-01  Friday   52
1   2021-10-02  Saturday 52
2   2021-10-03  Sunday   52
3   2021-10-04  Monday   1
4   2021-10-05  Tuesday  1
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
39
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Смещают даты на количество дней до нового года, они используют стандартное форматирование номера недели понедельника (%W):

df['Fiscal_Week'] = (
    df['date'] + pd.DateOffset(days=91)
).dt.strftime('%W').astype(int).replace({0:None}).fillna(method='ffill')
  • Смещение в днях можно рассчитать вручную (я предполагаю, что начало финансового года фиксировано)
  • Часть replace необходима, потому что остатки за предыдущий год считаются неделей 0. Предыдущая неделя может быть 52 или 53, поэтому замените на NA, а затем заполните вперед

Кроме того, можем ли мы также получить fiscal_year_start так же, как первый понедельник октября данного года? (df['Fiscal_Year_Start'] = ( df['date'] + pd.DateOffset(days=91) ).dt.strftime('%Y_%m_%d') у меня не работает.

usermay14 06.05.2022 17:36

@ usermay14 да, я скоро добавлю пример

Marat 06.05.2022 17:41

Кроме того, почему у вас есть days=91?

usermay14 06.05.2022 17:47

@ usermay14 Я предположил, что финансовый год начинается в фиксированный день, например 1 октября, поэтому фиксированное количество дней до Нового года, чтобы исправить номер недели. Текущий код основан на предположении

Marat 06.05.2022 19:11

Другие вопросы по теме