Как добавить новый столбец на основе различных условий в других столбцах панды

#python #pandas

Вопрос:

Это мой фрейм данных:

 Date        Month
04/21/2019  April
07/03/2019  July
01/05/2018  January
09/23/2019  September
 

Я хочу добавить столбец под названием финансовый год. Новый финансовый год начинается 1 июля каждого года и заканчивается в последний день июня. Так, например, если год 2019, а месяц апрель, то это все еще 2019 финансовый год. Однако, если год 2019, но месяц-это что-то после июня, это будет 2020 финансовый год. Результирующий фрейм данных должен выглядеть следующим образом:

  Date        Month      FY
04/21/2019  April      FY19
07/03/2019  July       FY20
01/05/2019  January    FY19
09/23/2019  September  FY20
 

Как мне этого добиться?

Ответ №1:

Один из способов использования pandas.Dateoffset :

 df["FY"] = (pd.to_datetime(df["Date"]) 
              pd.DateOffset(months=6)).dt.strftime("FY%Y")
print(df)
 

Выход:

          Date      Month      FY
0  04/21/2019      April  FY2019
1  07/03/2019       July  FY2020
2  01/05/2019    January  FY2019
3  09/23/2019  September  FY2020
 

Ответ №2:

попробуйте через pd.PeriodIndex() pd.to_datetime() :

 df['Date']=pd.to_datetime(df['Date'])
df['FY']=pd.PeriodIndex(df['Date'],freq='A-JUN').strftime("FY%y")
 

выход:

     Date        Month       FY
0   2019-04-21  April       FY19
1   2019-07-03  July        FY20
2   2019-01-05  January     FY19
3   2019-09-23  September   FY20
 

Примечание: Я предлагаю вам сначала преобразовать 'Date' столбец в дату и время, а затем выполнить с ним какие-либо операции, или, если вы не хотите конвертировать 'Date' столбец, используйте приведенный выше код за один шаг.:

 df['FY']=pd.PeriodIndex(pd.to_datetime(df['Date']),freq='A-JUN').strftime("FY%y")