如何将 Pandas 数据框偏移/转移到另一年?

Posted

技术标签:

【中文标题】如何将 Pandas 数据框偏移/转移到另一年?【英文标题】:How to offset/shift a Pandas Dataframe into another year? 【发布时间】:2013-09-14 09:23:36 【问题描述】:

我将以下 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 

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

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

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

【问题讨论】:

【参考方案1】:
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

【讨论】:

我不太喜欢这个答案,我认为减去一年应该可行....要打开一个问题 这行得通,但我同意你的看法,如果可以将它移动/抵消一年,那就太好了。 df.index = df.index-pd.offsets.YearBegin(1)df.index = df.index-pd.offsets.YearEnd(1) 提供类似的结果,例如 df = df.shift(-1, 'A') 我为此创建了一个问题:github.com/pydata/pandas/issues/4804,但不完全确定这是一个错误,因为您正在做的是预先更改系列的频率,然后减去 1 年,这是“正确的” ' 精确移动一年很有用,尤其是当您的时间序列是季节性的时。 365 天偏移方法错过闰年 如果你这样做,星期可能会改变。此外,如果观察临近假期,则移动 365 天可能不会让您处于与假期相同的位置。

以上是关于如何将 Pandas 数据框偏移/转移到另一年?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python pandas 根据条件将行值复制到另一列

如何将内置的 Cython 扩展从 PC 转移到另一台?

将Mysql数据库转移到另一台计算机[关闭]

如何将值从一列映射到另一列数据框? [复制]

如何将我的所有 python 库从一台机器转移到另一台机器[重复]

将 TFS 2012 转移到另一台机器