我有一个数据框,其日期时间索引具有每小时粒度,其中包含1列值。我想要另一列包含年度粒度值的平均值。
我继续这样做
df = pd.DataFrame(range(8760*2), index=pd.date_range('2015-12-30', freq='H', periods=8760*2))
df1 = df.resample('A', how='mean')
df1.rename(columns={0: 'mean'}, inplace=True)
df1.reindex(df.index, method='bfill').head(48)
我获得了df1的以下结果:
2015-12-31 23.5
2016-12-31 4439.5
2017-12-31 13175.5
这对于rindexing:
2015-12-30 00:00:00 23.5
...
2015-12-30 23:00:00 23.5
2015-12-31 00:00:00 23.5
2015-12-31 01:00:00 4439.5
2015-12-31 02:00:00 4439.5
2015-12-31 03:00:00 4439.5
2015-12-31 04:00:00 4439.5
...
2015-12-31 22:00:00 4439.5
2015-12-31 23:00:00 4439.5
正如您所看到的那样,存在一个问题,因为重建索引会强制执行回填值,直到一年中最后一天的0小时,而不是之后。
有人解决了这个问题吗?
非常感谢。
答案 0 :(得分:2)
df = pd.DataFrame(range(8760*2), dtype='float',
index=pd.date_range('2015-12-30', freq='H', periods=8760*2))
df1 = df.groupby(df.index.year).transform('mean')
产量
...
2015-12-31 23:00:00 23.5
2016-01-01 00:00:00 4439.5
...
注意:我将df
的dtype更改为float
,因此平均值也是dtype float
。