如何将 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 根据条件将行值复制到另一列