如何将 Pandas Dataframe 偏移/转移到另一年?

Mar*_*s W 5 python indexing time-series offset pandas

我有以下 15 分钟的数据作为 3 年的数据框。前两列是索引。

2014-01-01 00:15:00  1269.6      
2014-01-01 00:30:00  1161.6      
2014-01-01 00:45:00  1466.4      
2014-01-01 01:00:00  1365.6      
2014-01-01 01:15:00  1362.6      
2014-01-01 01:30:00  1064.0      
2014-01-01 01:45:00  1171.2      
2014-01-01 02:00:00  1171.0      
2014-01-01 02:15:00  1330.4      
2014-01-01 02:30:00  1309.6      
2014-01-01 02:45:00  1308.4      
2014-01-01 03:00:00  1494.0 
Run Code Online (Sandbox Code Playgroud)

我想将数据抵消/转移到上一年,以便 2014-01-01 00:15:00 1269.6 将其转换为 2013-01-01 00:15:00 1269.6.

我已经使用 df = df.shift(-1, freq='15min') 将数据帧移至过去 15 分钟,但不希望偏移/移动 15 分钟间隔的数量,因为这可能会导致闰年和随着时钟的变化。

有人对此有一个顺利的解决方案吗?

Jef*_*eff 5

In [13]: df = DataFrame(randn(10,1),index=date_range('20140101 00:15:00',freq='15T',periods=10))

In [14]: df
Out[14]: 
                            0
2014-01-01 00:15:00 -0.176117
2014-01-01 00:30:00  0.517030
2014-01-01 00:45:00  1.033585
2014-01-01 01:00:00 -0.284402
2014-01-01 01:15:00  0.476984
2014-01-01 01:30:00  0.356078
2014-01-01 01:45:00 -0.285609
2014-01-01 02:00:00  0.423048
2014-01-01 02:15:00  0.095823
2014-01-01 02:30:00 -1.123258

In [15]: df.index = df.index-pd.offsets.Day(365)

In [16]: df
Out[16]: 
                            0
2013-01-01 00:15:00 -0.176117
2013-01-01 00:30:00  0.517030
2013-01-01 00:45:00  1.033585
2013-01-01 01:00:00 -0.284402
2013-01-01 01:15:00  0.476984
2013-01-01 01:30:00  0.356078
2013-01-01 01:45:00 -0.285609
2013-01-01 02:00:00  0.423048
2013-01-01 02:15:00  0.095823
2013-01-01 02:30:00 -1.123258
Run Code Online (Sandbox Code Playgroud)