• 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实现数据偏移

  • 相关阅读:
    线程池的创建方式
    lock和synchronized如何选择?
    Java中常用的url签名防篡改方法
    jvm异常记录
    mysql索引
    PHP:PDO prepare预处理
    零度CC JavaScript获取页面、屏幕尺寸大小
    【转】 Javascript中document.execCommand()的用法
    获取元素的属性-border问题
    CSS样式定义的优先级顺序总结
  • 原文地址:https://www.cnblogs.com/hider/p/14702635.html
Copyright © 2020-2023  润新知