shift
函数是Pandas库中用于数据位移的函数,常用于时间序列数据的处理。通过shift
函数,我们可以将数据向上或向下移动指定的周期数。
基本语法
shift
函数的基本语法如下:
DataFrame.shift(periods=1, freq=None, axis=0, fill_value=None)
periods
:表示移动的周期数,默认为1。freq
:表示移动的频率,默认为None。axis
:表示移动的方向,0表示向下移动,1表示向右移动,默认为0。fill_value
:表示填充缺失值的值,默认为None。
内容
原始数据:
df = pd.DataFrame({"Col1": [10, 20, 15, 30, 45], "Col2": [13, 23, 18, 33, 48], "Col3": [17, 27, 22, 37, 52] }, index=pd.date_range("2020-01-01", "2020-01-05") )
输出:
Col1 | Col2 | Col3 | |
---|---|---|---|
2020-01-01 | 10 | 13 | 17 |
2020-01-02 | 20 | 23 | 27 |
2020-01-03 | 15 | 18 | 22 |
2020-01-04 | 30 | 33 | 37 |
2020-01-05 | 45 | 48 | 52 |
应用案例1:向下移动数据
df.shift(periods=3)
输出:
Col1 | Col2 | Col3 | |
---|---|---|---|
2020-01-01 | NaN | NaN | NaN |
2020-01-02 | NaN | NaN | NaN |
2020-01-03 | NaN | NaN | NaN |
2020-01-04 | 10.0 | 13.0 | 17.0 |
2020-01-05 | 20.0 | 23.0 | 27.0 |
应用案例2:向右移动数据
df.shift(periods=1, axis="columns")
输出:
Col1 | Col2 | Col3 | |
---|---|---|---|
2020-01-01 | NaN | 10.0 | 13.0 |
2020-01-02 | NaN | 20.0 | 23.0 |
2020-01-03 | NaN | 15.0 | 18.0 |
2020-01-04 | NaN | 30.0 | 33.0 |
2020-01-05 | NaN | 45.0 | 48.0 |
应用案例3:填充缺失值
df.shift(periods=3, fill_value=0)
输出:
Col1 | Col2 | Col3 | |
---|---|---|---|
2020-01-01 | 0 | 0 | 0 |
2020-01-02 | 0 | 0 | 0 |
2020-01-03 | 0 | 0 | 0 |
2020-01-04 | 10.0 | 13.0 | 17.0 |
2020-01-05 | 20.0 | 23.0 | 27.0 |
应用案例4:按照频率移动数据
df.shift(periods=3, freq="D")
输出:
Col1 | Col2 | Col3 | |
---|---|---|---|
2020-01-04 | 10.0 | 13.0 | 17.0 |
2020-01-05 | 20.0 | 23.0 | 27.0 |
2020-01-06 | 15.0 | 18.0 | 22.0 |
2020-01-07 | 30.0 | 33.0 | 37.0 |
2020-01-08 | 45.0 | 48.0 | 52.0 |
应用案例5:按照推断的频率移动数据
df.shift(periods=3, freq="infer")
输出:
Col1 | Col2 | Col3 | |
---|---|---|---|
2020-01-04 | 10.0 | 13.0 | 17.0 |
2020-01-05 | 20.0 | 23.0 | 27.0 |
2020-01-06 | 15.0 | 18.0 | 22.0 |
2020-01-07 | 30.0 | 33.0 | 37.0 |
2020-01-08 | 45.0 | 48.0 | 52.0 |
应用案例6:按照指定的周期数列表移动数据
df['Col1'].shift(periods=[0, 1, 2])
输出:
Col1_0 | Col1_1 | Col1_2 | |
---|---|---|---|
2020-01-01 | 10.0 | NaN | NaN |
2020-01-02 | 20.0 | 10.0 | NaN |
2020-01-03 | 15.0 | 20.0 | 10.0 |
2020-01-04 | 30.0 | 15.0 | 20.0 |
2020-01-05 | 45.0 | 30.0 | 15.0 |
在这个案例中,我们使用了shift
函数对一个特定的列Col1
进行了操作,并且传递了一个周期数列表[0, 1, 2]
。这意味着我们会得到三列新的数据,分别表示原始数据列Col1
在不同周期数位移后的结果。例如,Col1_1
是Col1
向上移动1个周期后的数据,Col1_2
是Col1
向上移动2个周期后的数据,以此类推。这样,我们可以一次性得到多个位移后的数据版本,这在某些分析场景中非常有用。