如何在Pandas中获取数据帧的移位索引值?

时间:2016-06-14 19:02:34

标签: python pandas dataframe date-range shift

考虑以下简单示例:

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_shifted2011-01-01 00:00:00

我该怎么做? 谢谢!

2 个答案:

答案 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)有什么问题?

(真正的问题,不确定我是否错过了什么)