pandas中的 shift使用(pandas.DataFrame.shift)

api参考:

pandas中的 shift使用(pandas.DataFrame.shift)

pandas.DataFrame.shift 含义及参数定义:

pandas中的 shift使用(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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球