zoukankan      html  css  js  c++  java
  • Python学习笔记:shift函数实现数据偏移

    一、背景

    当需要统计不同周期的变化情况时,需要使用数据偏移,在 Python 中使用 shift 函数实现。

    # 一阶差分
    diff_num = num - num.shift(1)
    

    二、实现

    1.创建测试表

    import pandas as pd
    
    dic = {'id':[1,2,2,3,3,3],
           'num':[4,2,7,10,5,5]       
           }
    
    data = pd.DataFrame(dic)
    print(data)
    ```
       id  num
    0   1    4
    1   2    2
    2   2    7
    3   3   10
    4   3    5
    5   3    5
    ```
    

    2.分析

    • 新增一列存储每个id上一周期数量
    • 将两列做差即可

    3.shift函数

    通过 shift 函数实现数据的上下偏移,使用语法:

    df.shift(periods=1, freq=None, axis=0)
    
    • periods 偏移的幅度(正值表示下、右编译,负值表示上、左偏移)
    • freq 适用于时间索引的偏移 值不发生变化
    • axis 轴向指定(axis=0表示纵向偏移,axis=1表示横向偏移,默认纵向)

    4.实例

    # 所有字段向下偏移一行
    data.shift(1)
    ```
        id   num
    0  NaN   NaN
    1  1.0   4.0
    2  2.0   2.0
    3  2.0   7.0
    4  3.0  10.0
    5  3.0   5.0
    ```
    
    # 所有字段向上偏移一行
    data.shift(-1)
    ```
        id   num
    0  2.0   2.0
    1  2.0   7.0
    2  3.0  10.0
    3  3.0   5.0
    4  3.0   5.0
    5  NaN   NaN
    ```
    
    # 所有字段向右偏移一列
    data.shift(1, axis=1)
    ```
       id  num
    0 NaN  1.0
    1 NaN  2.0
    2 NaN  2.0
    3 NaN  3.0
    4 NaN  3.0
    5 NaN  3.0
    ```
    
    # 所有字段向左偏移一列
    data.shift(-1, axis=1)
    ```
         id  num
    0   4.0  NaN
    1   2.0  NaN
    2   7.0  NaN
    3  10.0  NaN
    4   5.0  NaN
    5   5.0  NaN
    ```
    
    # 全部偏移
    data["last_num"] = data["num"]
    data["last_num"] = data["last_num"].shift(1).fillna(0)
    ```
       id  num  last_num
    0   1    4       0.0
    1   2    2       4.0
    2   2    7       2.0
    3   3   10       7.0
    4   3    5      10.0
    5   3    5       5.0
    ```
    
    # 按id分组偏移
    data["last_num"] = data.groupby("id")["num"].shift(1).fillna(0)
    data["diff_num"] = data["num"] - data["last_num"]
    ```
       id  num  last_num  diff_num
    0   1    4       0.0       4.0
    1   2    2       0.0       2.0
    2   2    7       2.0       5.0
    3   3   10       0.0      10.0
    4   3    5      10.0      -5.0
    5   3    5       5.0       0.0
    ```
    

    参考链接:利用Python实现数据偏移

  • 相关阅读:
    【Web】JavaScript 语法入门
    tar 和gzip 的区别
    状态码,好记
    PyCharm与git/GitHub取消关联
    在Ubuntu下安装deb包需要使用dpkg命令
    linux每日命令(4):解压命令
    Python之os.path.join()
    Python的JAVA胶水——jpype
    python之chardet验证编码格式
    python之arrow时间处理模块
  • 原文地址:https://www.cnblogs.com/hider/p/14702635.html
Copyright © 2011-2022 走看看