Я пытался рассчитать номер недели, начиная с первого понедельника октября. Есть ли какие-либо функции в pandas или datetime для эффективного расчета?
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
Смещают даты на количество дней до нового года, они используют стандартное форматирование номера недели понедельника (%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
, а затем заполните вперед@ usermay14 да, я скоро добавлю пример
Кроме того, почему у вас есть days=91
?
@ usermay14 Я предположил, что финансовый год начинается в фиксированный день, например 1 октября, поэтому фиксированное количество дней до Нового года, чтобы исправить номер недели. Текущий код основан на предположении
Кроме того, можем ли мы также получить
fiscal_year_start
так же, как первый понедельник октября данного года? (df['Fiscal_Year_Start'] = ( df['date'] + pd.DateOffset(days=91) ).dt.strftime('%Y_%m_%d')
у меня не работает.