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

  • 相关阅读:
    iOS实时查看App运行日志
    Jmeter-使用Ultimate Thread Group插件来设置负载场景
    Flask使用Flask-SQLAlchemy操作MySQL数据库
    使用requests库提交multipart/form-data 格式的请求
    spark 性能调优(一) 性能调优的本质、spark资源使用原理、调优要点分析
    一、spark错误
    sqoop 补充
    Hbase—— rowkey 过滤器(rowfilter)
    spark 调优——基础篇
    scala 的安装 与 IDEA安装使用
  • 原文地址:https://www.cnblogs.com/hider/p/14702635.html
Copyright © 2011-2022 走看看