【发布时间】:2020-06-10 09:55:02
【问题描述】:
我有很多年的每小时数据,格式如下:
df = pd.DataFrame({'Value': [0, 1, 2, 3, 4]},
index = [pd.Timestamp('20130101 09:00:00'),
pd.Timestamp('20130101 10:00:00'),
pd.Timestamp('20130101 11:00:00'),
pd.Timestamp('20130101 12:00:00'),
pd.Timestamp('20130101 13:00:00')])
但是我有从 2013 年到 2019 年底的数据。我想按年向前滚动数据,所以假设我希望从 2013 年滚动到 2014 年的所有值并考虑时间戳差异(所以如果它是闰年,它应该仍然工作)。结果应如下所示:
dfnew = pd.DataFrame({'Value': [0, 1, 2, 3, 4]},
index = [pd.Timestamp('20140101 09:00:00'),
pd.Timestamp('20140101 10:00:00'),
pd.Timestamp('20140101 11:00:00'),
pd.Timestamp('20140101 12:00:00'),
pd.Timestamp('20140101 13:00:00')])
编辑:
如果我从 2015 年前滚到 2016 年,那么一年中的小时数会增加 24,因此 29/2 应该向前填充 28/2。 从 2016 年滚动到 2017 年时,它应该按日期(月和日)匹配,并且 29/2 应该再次退出。
编辑 2:
所以我想要这样的东西: df.forwardcopy(yeartobecopied = 2015, pasteedtoyear=2016) 如果粘贴到闰年,则将日、月和小时的值对齐并进行前向填充,如果从闰年复制,则退出 29/2。
编辑 3:
抱歉,这里再次解释了输入和预期输出。从 2015 年滚动到 2016 年。
输入:
df = pd.DataFrame({'Value': [0, 1, 2, 3]},
index = [pd.Timestamp('20150228 09:00:00'),
pd.Timestamp('20150228 10:00:00'),
pd.Timestamp('20150301 09:00:00'),
pd.Timestamp('20150301 10:00:00')])
输出:
df = pd.DataFrame({'Value': [0, 1, 0,1, 2, 3]},
index = [pd.Timestamp('20160228 09:00:00'),
pd.Timestamp('20160228 10:00:00'),
pd.Timestamp('20160229 09:00:00'),
pd.Timestamp('20160229 10:00:00'),
pd.Timestamp('20160301 09:00:00'),
pd.Timestamp('20160301 10:00:00')])
然后从 2016 年到 2017 年。
输入:
df = pd.DataFrame({'Value': [0, 1, 0,1, 2, 3]},
index = [pd.Timestamp('20160228 09:00:00'),
pd.Timestamp('20160228 10:00:00'),
pd.Timestamp('20160229 09:00:00'),
pd.Timestamp('20160229 10:00:00'),
pd.Timestamp('20160301 09:00:00'),
pd.Timestamp('20160301 10:00:00')])
输出:
df = pd.DataFrame({'Value': [0, 1, 2, 3]},
index = [pd.Timestamp('20170228 09:00:00'),
pd.Timestamp('20170228 10:00:00'),
pd.Timestamp('20170301 09:00:00'),
pd.Timestamp('20170301 10:00:00')])
【问题讨论】:
-
如果
2015-02-28 10:00:00是当前年份,一年后的填充值应该是多少? -
是的,如果 2015-02-28 10:00:00 是当前年份,那么 2016-02-28 10:00:00 应该与 2015-02-28 10:00 的值相同:00
-
你能举出
if I roll forward from say 2015 to 2016 then the number of hours in the year increases by 24的例子吗? -
是的,这绝对正确。请参阅我的第二次编辑,希望它更清楚