2016-06-04 2 views
3

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

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 
+0

Обратите внимание, что для целей личного налога, Великобритании финансовый год начинается 6-го апреля ... – psychemedia

ответ

7
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) 

дает квартальных частоты Q

  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-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') 
+0

Это именно то, что я хочу, но я получаю эту ошибку: AttributeError: объект «PeriodIndex» не имеет атрибута «STRFTIME» –

+0

Я использую 0.16.2, а ваш код работает с 0.17.1 pandas –

+0

Для более старых версий pandas вы можете использовать 'df ['Quarter'] = 'Q' + pd.PeriodIndex (df ['date'], freq = 'Q-MAR'). to_series(). dt.quarter.astype (ул) '. – unutbu