api参考:
pandas.DataFrame.shift 含义及参数定义:
>>> 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"))
>>> df
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、period
df.shift(periods=3) # 可简写为df.shift(3)
- period:表示移动的幅度,可以是正数,也可以是负数,默认值是1,1就表示移动一次,注意这里移动的都是数据,而索引是不移动的,移动之后没有对应值的,就赋值为NaN。
>>> df.shift(periods=3) # 或df.shift(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
>>> df.shift(0)
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
>>> df.shift(1) # 或df.shift()
Col1 Col2 Col3
2020-01-01 NaN NaN NaN
2020-01-02 10.0 13.0 17.0
2020-01-03 20.0 23.0 27.0
2020-01-04 15.0 18.0 22.0
2020-01-05 30.0 33.0 37.0
当前行 减 上一行
>>> df.shift(0) - df.shift(1)
Col1 Col2 Col3
2020-01-01 NaN NaN NaN
2020-01-02 10.0 10.0 10.0
2020-01-03 -5.0 -5.0 -5.0
2020-01-04 15.0 15.0 15.0
2020-01-05 15.0 15.0 15.0
2、axis的使用
- axis: {0, 1, ‘index’, ‘columns’},表示移动的方向,如果是0或者’index’表示上下移动,如果是1或者’columns’,则会左右移动。
>>> df.shift(periods=1, axis="columns")
Col1 Col2 Col3
2020-01-01 NaN 10 13
2020-01-02 NaN 20 23
2020-01-03 NaN 15 18
2020-01-04 NaN 30 33
2020-01-05 NaN 45 48
3、fill_value
>>> 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 13 17
2020-01-05 20 23 27
4、freq
- freq: DateOffset, timedelta, or time rule string,可选参数,默认值为None,只适用于时间序列,如果这个参数存在,那么会按照参数值移动时间索引,而数据值没有发生变化。
- 要移位的频率增量。如果为 None,则索引由其自己的freq属性移位。偏移别名是有效的字符串,例如”D”、”W”、”M”等。
>>> df.shift(periods=3, freq="D")
Col1 Col2 Col3
2020-01-04 10 13 17
2020-01-05 20 23 27
2020-01-06 15 18 22
2020-01-07 30 33 37
2020-01-08 45 48 52
>>> df.shift(periods=3, freq="infer")
Col1 Col2 Col3
2020-01-04 10 13 17
2020-01-05 20 23 27
2020-01-06 15 18 22
2020-01-07 30 33 37
2020-01-08 45 48 52
假设存在如下DataFrame的df:
import numpy as np
>>> df = pd.DataFrame(np.arange(16).reshape(4,4),columns=['AA','BB','CC','DD'],
index =pd.date_range('2012-06-01','2012-06-04'))
>>> df
AA BB CC DD
2012-06-01 0 1 2 3
2012-06-02 4 5 6 7
2012-06-03 8 9 10 11
2012-06-04 12 13 14 15
执行 df.shift(freq=datetime.timedelta(1)) 后:
import datetime
>>> df.shift(freq=datetime.timedelta(1))
AA BB CC DD
2012-06-02 0 1 2 3
2012-06-03 4 5 6 7
2012-06-04 8 9 10 11
2012-06-05 12 13 14 15
执行 df.shift(freq=datetime.timedelta(-2)) 后:
import datetime
>>> df.shift(freq=datetime.timedelta(-2))
AA BB CC DD
2012-05-30 0 1 2 3
2012-05-31 4 5 6 7
2012-06-01 8 9 10 11
2012-06-02 12 13 14 15
参考官方文档及Pandas Shift函数的基础入门学习笔记 – Python教程 – 找一找教程网
Original: https://blog.csdn.net/conving/article/details/120199262
Author: 种麦南山下
Title: pandas中的 shift使用(pandas.DataFrame.shift)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/752414/
转载文章受原作者版权保护。转载请注明原作者出处!