考虑以下简单示例:
date = pd.date_range('1/1/2011', periods=5, freq='H')
df = pd.DataFrame({'cat' : ['A', 'A', 'A', 'B',
'B']}, index = date)
df
Out[278]:
cat
2011-01-01 00:00:00 A
2011-01-01 01:00:00 A
2011-01-01 02:00:00 A
2011-01-01 03:00:00 B
2011-01-01 04:00:00 B
我想创建一个包含索引的滞后/超前值的变量。这就像是:
df['index_shifted']=df.index.shift(1)
因此,例如,在时间2011-01-01 01:00:00
我希望变量index_shifted
为2011-01-01 00:00:00
我该怎么做? 谢谢!
答案 0 :(得分:8)
我认为-1
需要Index.shift
:
df['index_shifted']= df.index.shift(-1)
print (df)
cat index_shifted
2011-01-01 00:00:00 A 2010-12-31 23:00:00
2011-01-01 01:00:00 A 2011-01-01 00:00:00
2011-01-01 02:00:00 A 2011-01-01 01:00:00
2011-01-01 03:00:00 B 2011-01-01 02:00:00
2011-01-01 04:00:00 B 2011-01-01 03:00:00
对我而言,它没有freq
,但可能在实际数据中是必要的:
df['index_shifted']= df.index.shift(-1, freq='H')
print (df)
cat index_shifted
2011-01-01 00:00:00 A 2010-12-31 23:00:00
2011-01-01 01:00:00 A 2011-01-01 00:00:00
2011-01-01 02:00:00 A 2011-01-01 01:00:00
2011-01-01 03:00:00 B 2011-01-01 02:00:00
2011-01-01 04:00:00 B 2011-01-01 03:00:00
编辑:
如果freq
的{{1}}为DatetimeIndex
,则需要将None
添加到freq
:
shift
答案 1 :(得分:1)
df['index_shifted']=df.index.shift(-1)
有什么问题?
(真正的问题,不确定我是否错过了什么)