我在Pandas中有一个多索引dataFrame,数据通过构建索引,然后按日期。不同的列表示不同种类的能量,并且值表示给定月份使用了多少能量。 Image of the dataframe's head is here. 我想把它变成年度数据。我目前有这条线
df.unstack(level=0).resample('BAS-JUL').sum()
这完全符合几乎。问题在于:所有日期都是月份的第1天,但出于某种原因,正如resample
那样,它选择7月2日作为2012年的截止日期。所以7月1日的数字, 2012年最终计入2011年数据。 It ends up looking like this.您可以看到“使用月份”列中的第二个值是7月2日。除此之外,resample
似乎工作正常。
如果我运行df.index.get_level_values(1)[:20]
,则输出为:
DatetimeIndex(['2011-07-01', '2011-08-01', '2011-09-01', '2011-10-01',
'2011-11-01', '2011-12-01', '2012-01-01', '2012-02-01',
'2012-03-01', '2012-04-01', '2012-05-01', '2012-06-01',
'2012-07-01', '2012-08-01', '2012-09-01', '2012-10-01',
'2012-11-01', '2012-12-01', '2013-01-01', '2013-02-01'],
dtype='datetime64[ns]', name='Usage Month', freq=None)
因此索引是原始数据框中的2012年7月1日。
任何关于如何解决这个迷你bug的想法都将不胜感激!
答案 0 :(得分:0)
使用'AS-JUL':
df.unstack(level=0).resample('AS-JUL').sum()
B代表商业年度开始。