一、背景

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

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

二、实现

1.创建测试表

import pandas as pddic = {'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.实例

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 所有字段向下偏移一行
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有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1LL4y1h7ny?share_source=copy_web

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者
https://www.bilibili.com/video/BV1QZ4y1N7YA?share_source=copy_web

Python教程:shift函数实现数据偏移的方法相关推荐

  1. pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1)、索引不移动,移动之后无值的赋值为NaN、将原数据列与偏移后的数据列相加生成新的数据列

    pandas使用shift函数对数数据进行向上偏移(-1)或者向下偏移(1).索引不移动,移动之后无值的赋值为NaN.将原数据列与偏移后的数据列相加生成新的数据列 目录

  2. 计算机函数涵义,Excel函数教程: 引用函数的含义和表示方法-excel技巧-电脑技巧收藏家...

    Excel函数教程: 引用函数的含义和表示方法 Excel函数应用之逻辑函数 在介绍查询与引用函数之前,我们先来了解一下有关引用的知识. 1.引用的作用 在Excel中引用的作用在于标识工作表上的单元 ...

  3. java调用javascript函数_[Java教程]JavaScript函数的4种调用方法详解

    [Java教程]JavaScript函数的4种调用方法详解 0 2016-08-09 00:00:12 在JavaScript中,函数是一等公民,函数在JavaScript中是一个数据类型,而非像C# ...

  4. Python内置函数—vars的具体使用方法

    本文文章主要介绍了Python内置函数-vars的具体使用方法,分享给大家,具体如下: 英文文档: vars([object]) Return the dict attribute for a mod ...

  5. python中shift函数rolling_【邢不行|量化小讲堂系列18-Python量化入门】简易波动指标(EMV)策略实证...

    引言: 邢不行的系列帖子"量化小讲堂",通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助. 个人微信:xingbuxing0807,有问题欢迎 ...

  6. python中shift函数rolling_Pandas Shift函数的基础入门学习笔记

    pandas shift函数基础 在使用pandas的过程中,有时会遇到shift函数,今天就一起来彻底学习下.先来看看帮助文档是怎么说的: >>> import pandas &g ...

  7. Boost.Python教程:函数

    在本章中,我们将更详细地介绍Boost.Python驱动的函数.我们将看到一些工具,可以将C ++函数暴露给Python,避免潜在的pifall,例如悬空指针和引用. 我们还将看到一些工具,使我们更容 ...

  8. python中shift函数_pandas DataFrame.shift()函数

    pandas DataFrame.shift()函数可以把数据移动指定的位数 period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列. eg: 有这样一个DataFrame ...

  9. Python内置函数的源码中方法只有pass占位符说明 Docs

    pass python定义函数,必须有函数体,否则编译就会报错.函数体用一句pass占位是防止报错,并且不会有任何动作.内置函数中使用pass的情况如下: 父类中声明函数,但不声明实现,由继承的子类进 ...

最新文章

  1. json的序列化与反序列化
  2. tensorflow教程 一元线性回归
  3. Get Started Part 2
  4. K8S Learning(7)—— Deployment
  5. java公平索非公平锁_java中的非公平锁不怕有的线程一直得不到执行吗
  6. Python实现一个数组除以一个数
  7. mysql 5.5.35 单机多实例配置详解_基于mysql-5.5.32的单机多实例多配置文件的
  8. Oracle Tuning ( instance 级别 ) 01
  9. LeetCode 4Sum 4个数之和
  10. 蓝桥练习 之 单词个数统计
  11. jsp+servlet实现最基本的注册登陆功能
  12. c语言程序设计第三版何钦铭课后答案_C语言程序设计 (何钦铭 ) 高教版 第2版 课后习题答案.pdf...
  13. 反编译DLL。并且修改DLL内容
  14. python唯美壁纸_Python爬虫教程爬取5K分辨率超清唯美壁纸源码
  15. Exch:POP3 和 IMAP4 操作指南
  16. 互联网时代产品研发的思考
  17. 中国参与MOOC 建设的大学有多少所?
  18. 【解决】Initializing libiomp5md.dll, but found libiomp5md.dll already initialized. matplotlib.pylot 画图报错
  19. 夜莺日志采集mtail
  20. STM32启动文件startup_stm32f407xx.s

热门文章

  1. “chaos”的算法--之Floyd算法详解(求最短路径)
  2. 分析决策树算法和逻辑回归算法的不同之处
  3. 数据库中间件MyCAT源码分析:调试环境搭建
  4. Datatable删除行的Delete和Remove方法介绍
  5. session过期跳转登录页面
  6. Hibernate里自定义UserType时取不到值的问题
  7. 使用 MDT2008 轻量部署进行 Windows XP SP2 简单部署
  8. MYSQL 如果把数据文件保存到其他磁盘里
  9. 百度首页html简单代码_百度站长平台为什么要验证网站及验证方法
  10. 给采购凭证分配合作伙伴方案