python pandas: получить финансовый квартал из финансового года и месяца (для Великобритании)

У меня есть фреймворк с двумя полезными столбцами: 1) финансовый год, 2) дата. Я хочу добавить новый столбец, который показывает финансовый квартал.

FYI - Финансовый год в Великобритании длится с 1 апреля по 31 марта.

мои данные выглядят так:

    fiscal year  date
    FY15/16      2015-11-01
    FY14/15      2014-10-01
    FY15/16      2016-02-01

Я хочу, чтобы это выглядело так:

    fiscal year  date        Quarter
    FY15/16      2015-11-01  q3
    FY14/15      2014-10-01  q3
    FY15/16      2016-02-01  q4

Очень надеюсь, что у меня все получилось правильно!

Приведенный ниже код работает, но я считаю, что он возвращает американские финансовые кварталы, но мне нужна Великобритания.

df['Quater'] = df['Date'].dt.quarter 

person Boosted_d16    schedule 04.06.2016    source источник
comment
Обратите внимание, что для целей личного налогообложения финансовый год в Великобритании начинается 6 апреля ...   -  person psychemedia    schedule 14.01.2017


Ответы (1)


import pandas as pd
df = pd.DataFrame({'date': ['2015-11-01', '2014-10-01', '2016-02-01'],
                   'fiscal year': ['FY15/16', 'FY14/15', 'FY15/16']})
df['Quarter'] = pd.PeriodIndex(df['date'], freq='Q-MAR').strftime('Q%q')
print(df)

дает

         date fiscal year Quarter
0  2015-11-01     FY15/16      Q3
1  2014-10-01     FY14/15      Q3
2  2016-02-01     FY15/16      Q4

Ежеквартальная частота по умолчанию Q эквивалентна Q-DEC.

In [60]: pd.PeriodIndex(df['date'], freq='Q')
Out[60]: PeriodIndex(['2015Q4', '2014Q4', '2016Q1'], dtype='int64', freq='Q-DEC')

Q-DEC определяет квартальные периоды, последний квартал которых заканчивается в последний день декабря. Q-MAR определяет квартальные периоды, последний квартал которых заканчивается в последний день марта.

In [86]: pd.PeriodIndex(df['date'], freq='Q-MAR')
Out[86]: PeriodIndex(['2016Q3', '2015Q3', '2016Q4'], dtype='int64', freq='Q-MAR')
person unutbu    schedule 04.06.2016
comment
Это именно то, что я хочу, но получаю эту ошибку: AttributeError: объект PeriodIndex не имеет атрибута strftime. - person Boosted_d16; 04.06.2016
comment
Я использую 0.16.2, и ваш код работает на 0.17.1 pandas - person Boosted_d16; 04.06.2016
comment
Для более старых версий панд вы можете использовать df['Quarter'] = 'Q' + pd.PeriodIndex(df['date'], freq='Q-MAR').to_series().dt.quarter.astype(str). - person unutbu; 04.06.2016