我正在按会计年度分析交易,并使用一个具有日期时间列和年份单独列的数据框。我们的会计年度为xxxx的7月1日至xxxx的6月30日。以下代码适用于所有日期,但自2018年7月1日开始的任何日期除外,该日期属于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)
答案 0 :(得分:1)
您没有提供足够的垃圾箱。尽管您的最大年份为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']