Использование pandas date_range для обозначения финансовых лет не работает для самых последних дат - PullRequest
0 голосов
/ 09 октября 2018

Я анализирую транзакции по финансовым годам и работаю с фреймом данных, в котором есть столбец даты и времени и отдельный столбец для года.Наш финансовый год начинается 1 июля, хххх - 30 июня, хххх.Приведенный ниже код прекрасно работает для всех дат, за исключением любой даты, которая начинается с 1 июля 2008 года и будет относиться к периоду с 2018 по 2019 финансовый год.Ярлыки не генерируются ни для чего, кроме этой даты.Есть идеи, почему?

y_min = min(data['year'].unique()) # 2008
y_max = max(data['year'].unique()) # 2018 
labels = [str(x) + ' - ' + str(x+1) for x in np.arange(y_min, y_max, 1)]
data['period'] = pd.cut(data.date, pd.date_range(str(y_min), str(y_max+1), freq='BAS-JUL'), right=False, labels=labels)

1 Ответ

0 голосов
/ 09 октября 2018

Вы не предоставляете достаточно корзин.Хотя ваш максимальный год составляет 2018, поскольку у вас есть даты, которые должны быть сгруппированы с 2019, вам необходимо увеличить максимальный год на 1. Аналогично, вы должны вычесть 1 из минимального года.

y_max = data.year.max() + 1
y_min = data.year.min() - 1

Теперьу вас будут правильные корзины и метки, охватывающие весь набор данных:

pd.date_range(str(y_min), str(y_max+1), freq='BAS-JUL')
#DatetimeIndex(['2007-07-02', '2008-07-01', '2009-07-01', '2010-07-01', '2011-07-01',
#               '2012-07-02', '2013-07-01', '2014-07-01', '2015-07-01',
#               '2016-07-01', '2017-07-03', '2018-07-02', '2019-07-01'],
#              dtype='datetime64[ns]', freq='BAS-JUL')

labels = [str(x) + ' - ' + str(x+1) for x in np.arange(y_min, y_max, 1)]
#['2007 - 2008',
# '2008 - 2009',
# '2009 - 2010',
#...
# '2017 - 2018',
# '2018 - 2019']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...