pandas中的shift()函数
语法:
shift(periods, freq, axis)
注释:
-
period:表示移动的幅度,可以是正数,也可以是负数,默认值是1,1就表示移动一次,注意这里移动的都是数据,而索引是不移动的,移动之后没有对应值的,就赋值为NaN。
-
freq: DateOffset, timedelta, or time rule string,可选参数,默认值为None,只适用于时间序列,如果这个参数存在,那么会按照参数值移动时间索引,而数据值没有发生变化。
3. axis: 轴向。0为垂,1为水平
import pandas as pd
import numpy as np
import datetime
df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['A','B','C','D'],index=pd.date_range('20130101', periods=4))
df
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
#默认是axis = 0轴的设定,当period为正时向下移动
df.shift(2)
A B C D
2013-01-01 NaN NaN NaN NaN
2013-01-02 NaN NaN NaN NaN
2013-01-03 0.0 1.0 2.0 3.0
2013-01-04 4.0 5.0 6.0 7.0
#默认是axis = 0轴的设定,当period为负时向上移动
df.shift(-2)
A B C D
2013-01-01 8.0 9.0 10.0 11.0
2013-01-02 12.0 13.0 14.0 15.0
2013-01-03 NaN NaN NaN NaN
2013-01-04 NaN NaN NaN NaN
#axis = 1,当period为正向右,为负向左移动
df.shift(2,axis=1)
A B C D
2013-01-01 NaN NaN 0.0 1.0
2013-01-02 NaN NaN 4.0 5.0
2013-01-03 NaN NaN 8.0 9.0
2013-01-04 NaN NaN 12.0 13.0
# frep参数决定索引为日期,正加负减
df.shift(freq=datetime.timedelta(1))
A B C D
2013-01-02 0 1 2 3
2013-01-03 4 5 6 7
2013-01-04 8 9 10 11
2013-01-05 12 13 14 15
df.shift(freq=datetime.timedelta(-1))
A B C D
2012-12-31 0 1 2 3
2013-01-01 4 5 6 7
2013-01-02 8 9 10 11
2013-01-03 12 13 14 15