处理 pandas 中重采样年份的最后一小时

Dealing with last hour in a resampled year in pandas

在一年多的时间里,我一直在处理每小时一个条目的时间序列。为了更好地分析数据,我用 pandas 按月重新采样,并用 df = df.resample('M').sum()

对结果求和

由于最后一天的最后一个小时是从 23:00 31/12 到次年的 00:00 01/01,因此最后一个小时将重新采样到次年的一月(例如我的时间序列是 2020 年,31/12/2020 的最后一个小时被重新采样到 2021 年 1 月)。这意味着我丢失了 12 月的数据。

我考虑过将数据添加回 12 月,但有没有更好的方法来实现这一点?

很遗憾,您需要将其添加到前一小时,例如通过:

rng = pd.date_range('2017-12-31 12:00:00', periods=13, freq='H')
df = pd.DataFrame({'a': range(len(rng))}, index=rng)  

y = df.index.year
df.index = df.index.where(y != y.max(),  df.index - pd.Timedelta(1, unit='H'))
print (df)
                      a
2017-12-31 12:00:00   0
2017-12-31 13:00:00   1
2017-12-31 14:00:00   2
2017-12-31 15:00:00   3
2017-12-31 16:00:00   4
2017-12-31 17:00:00   5
2017-12-31 18:00:00   6
2017-12-31 19:00:00   7
2017-12-31 20:00:00   8
2017-12-31 21:00:00   9
2017-12-31 22:00:00  10
2017-12-31 23:00:00  11
2017-12-31 23:00:00  12


df = df.resample('M').sum()
print (df)

             a
2017-12-31  78