Добавить столбец категории на основе даты - Pandas Dataframe - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть фрейм данных со столбцом ORDER_DATE. Я пытаюсь добавить новый столбец для FISCAL_YEAR, который по существу имеет этот тип критериев:

  • Если между 7/1/16 и 6/30/17 = FY2017
  • Если между 7/1/17 и 6/30/18 = FY2018

Единственный способ, которым я мог подумать, это сделать серию условных утверждений, которые, я уверен, не самые эффективные или изящные. Хотя мое решение работает так, как задумано, оно длится вечно, и я надеюсь на предложения о том, как его улучшить.

    #adds a fiscal year column to purchases
    purchases['FISCAL_YEAR'] = 'N/A'
    purchases['FISCAL_YEAR'][(purchases['ORDER_DATE'] >= dt.datetime.strptime('2017-07-01', "%Y-%m-%d").date()) & \
(purchases['ORDER_DATE'] <= dt.datetime.strptime('2018-06-30', "%Y-%m-%d").date())] = 'FY2017'

    purchases['FISCAL_YEAR'][(purchases['ORDER_DATE'] >= dt.datetime.strptime('2017-07-01', "%Y-%m-%d").date()) & \
(purchases['ORDER_DATE'] <= dt.datetime.strptime('2018-06-30', "%Y-%m-%d").date())] = 'FY2018'

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Вы можете присвоить PeriodIndex фрейму данных с июньской годовой периодичностью (A-Jun), например:

df = pd.DataFrame({'date': pd.DatetimeIndex(start='2015-01', end='2016-12', freq='D')})
df = df.assign(fiscal_year=pd.PeriodIndex(df.date, freq='A-Jun'))

Если вам нужно представление строки (например, FY2015),

df.assign(fiscal_year_str='FY' + df['fiscal_year'].astype(str))
0 голосов
/ 18 сентября 2018
df['ORDER DATE'] = pd.to_datetime(df['ORDER DATE'])
def fisc_year(x):
    if (x > pd.to_datetime('2016-07-01')) & (x < pd.to_datetime('2017-06-30')):
        return 'FY2017'
    elif (x > pd.to_datetime('2017-07-01')) & (x < pd.to_datetime('2018-06-30')):
        return 'FY2018'
df['FY'] = df['ORDER DATE'].apply(fisc_year)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...