Можно ли получить атрибут дата-год для индекса периода или диапазона периода? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу получить финансовый год компании, чей квартал заканчивается в последнюю пятницу квартала, где начало финансового года - май, а месяц окончания финансового года - апрель. Я получаю календарный год года окончания квартала, когда спрашиваю атрибут календарного года для Periodindex (и я понимаю, почему и что я могу получить начало квартала). Но могу ли я обойти это, все еще устанавливая мои финансовые кварталы со смещением?

список дат - тестовые данные

first_date = datetime(2017, 1, 1)
last_date = datetime(2019, 9, 20)
x = 30
list_of_dates = [date for date in np.arange(first_date, last_date, timedelta(days=x)).astype(datetime)]

создать фрейм данных

df = pd.DataFrame({'dates': list_of_dates})

создать индекс

idx = pd.PeriodIndex(df.dates, freq='Q-APR')

df['fscl_YrQtr'] = idx
df['calendar_Yr'] = idx.year
df['fscl_Yr'] = idx.qyear
df['fscl_Qtr'] = idx.quarter

Следующие все работы, кромепоследний (df ['fscl_year_huh']), который просто дает мне 2018 постоянно. Я не могу понять это.

df['Q_end_date'] = [date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates]
df['fscl_year_quarter'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR')
df['month'] = df.dates.dt.month
df['year'] = df.dates.dt.year
df['fscl_days_of_period'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR').day
df['fscl_quarter_num'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR').quarter
df['fscl_year_huh'] = pd.PeriodIndex([date - pd.tseries.offsets.DateOffset(days=1) + pd.tseries.offsets.FY5253Quarter(normalize=True, weekday=4,startingMonth=4, qtr_with_extra_week=1, variation='last') for date in  df.dates], freq='Q-APR').year

1 Ответ

0 голосов
/ 08 октября 2019

Я не знаю, является ли это pythonic, но я решил проблему, используя loc:

df.loc[((df.dates.dt.month >= 5) | ((df.dates.dt.month == 4) & (df['fscl_quarter_num'] == 1))), 'fiscl_year'] = df.dates.dt.year + 1
df.loc[((df.dates.dt.month <= 4) & (df['fscl_quarter_num'] != 1)), 'fiscl_year'] = df.dates.dt.year

в любом месяце мая или позже получит рост финансового года. любой месяц апреля, в котором финансовый месяц заканчивается до конца месяца, будет иметь финансовый квартал 1 на конец месяца.

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