浅谈pandas中shift和diff函数关系


Posted in Python onApril 08, 2018

通过?pandas.DataFrame.shift命令查看帮助文档

Signature: pandas.DataFrame.shift(self, periods=1, freq=None, axis=0) 
Docstring: 
Shift index by desired number of periods with an optional time freq

该函数主要的功能就是使数据框中的数据移动,若freq=None时,根据axis的设置,行索引数据保持不变,列索引数据可以在行上上下移动或在列上左右移动;若行索引为时间序列,则可以设置freq参数,根据periods和freq参数值组合,使行索引每次发生periods*freq偏移量滚动,列索引数据不会移动

① 对于DataFrame的行索引是日期型,行索引发生移动,列索引数据不变

In [2]: import pandas as pd
  ...: import numpy as np
  ...: df = pd.DataFrame(np.arange(24).reshape(6,4),index=pd.date_range(start=
  ...: '20170101',periods=6),columns=['A','B','C','D'])
  ...: df
  ...:
Out[2]:
       A  B  C  D
2017-01-01  0  1  2  3
2017-01-02  4  5  6  7
2017-01-03  8  9 10 11
2017-01-04 12 13 14 15
2017-01-05 16 17 18 19
2017-01-06 20 21 22 23
In [3]: df.shift(2,axis=0,freq='2D')
Out[3]:
       A  B  C  D
2017-01-05  0  1  2  3
2017-01-06  4  5  6  7
2017-01-07  8  9 10 11
2017-01-08 12 13 14 15
2017-01-09 16 17 18 19
2017-01-10 20 21 22 23
In [4]: df.shift(2,axis=1,freq='2D')
Out[4]:
       A  B  C  D
2017-01-05  0  1  2  3
2017-01-06  4  5  6  7
2017-01-07  8  9 10 11
2017-01-08 12 13 14 15
2017-01-09 16 17 18 19
2017-01-10 20 21 22 23
In [5]: df.shift(2,freq='2D')
Out[5]:
       A  B  C  D
2017-01-05  0  1  2  3
2017-01-06  4  5  6  7
2017-01-07  8  9 10 11
2017-01-08 12 13 14 15
2017-01-09 16 17 18 19
2017-01-10 20 21 22 23

结论:对于时间索引而言,shift使时间索引发生移动,其他数据保存原样,且axis设置没有任何影响

② 对于DataFrame行索引为非时间序列,行索引数据保持不变,列索引数据发生移动

In [6]: import pandas as pd
  ...: import numpy as np
  ...: df = pd.DataFrame(np.arange(24).reshape(6,4),index=['r1','r2','r3','r4'
  ...: ,'r5','r6'],columns=['A','B','C','D'])
  ...: df
  ...:
Out[6]:
   A  B  C  D
r1  0  1  2  3
r2  4  5  6  7
r3  8  9 10 11
r4 12 13 14 15
r5 16 17 18 19
r6 20 21 22 23
In [7]: df.shift(periods=2,axis=0)
Out[7]:
    A   B   C   D
r1  NaN  NaN  NaN  NaN
r2  NaN  NaN  NaN  NaN
r3  0.0  1.0  2.0  3.0
r4  4.0  5.0  6.0  7.0
r5  8.0  9.0 10.0 11.0
r6 12.0 13.0 14.0 15.0
In [8]: df.shift(periods=-2,axis=0)
Out[8]:
    A   B   C   D
r1  8.0  9.0 10.0 11.0
r2 12.0 13.0 14.0 15.0
r3 16.0 17.0 18.0 19.0
r4 20.0 21.0 22.0 23.0
r5  NaN  NaN  NaN  NaN
r6  NaN  NaN  NaN  NaN
In [9]: df.shift(periods=2,axis=1)
Out[9]:
   A  B   C   D
r1 NaN NaN  0.0  1.0
r2 NaN NaN  4.0  5.0
r3 NaN NaN  8.0  9.0
r4 NaN NaN 12.0 13.0
r5 NaN NaN 16.0 17.0
r6 NaN NaN 20.0 21.0
In [10]: df.shift(periods=-2,axis=1)
Out[10]:
    A   B  C  D
r1  2.0  3.0 NaN NaN
r2  6.0  7.0 NaN NaN
r3 10.0 11.0 NaN NaN
r4 14.0 15.0 NaN NaN
r5 18.0 19.0 NaN NaN
r6 22.0 23.0 NaN NaN

通过?pandas.DataFrame.diff命令查看帮助文档,发现和shift函数形式一样

Signature: pd.DataFrame.diff(self, periods=1, axis=0) 
Docstring: 
1st discrete difference of object

下面看看diff函数和shift函数之间的关系

In [13]: df.diff(periods=2,axis=0)
Out[13]:
   A  B  C  D
r1 NaN NaN NaN NaN
r2 NaN NaN NaN NaN
r3 8.0 8.0 8.0 8.0
r4 8.0 8.0 8.0 8.0
r5 8.0 8.0 8.0 8.0
r6 8.0 8.0 8.0 8.0
In [14]: df -df.diff(periods=2,axis=0)
Out[14]:
    A   B   C   D
r1  NaN  NaN  NaN  NaN
r2  NaN  NaN  NaN  NaN
r3  0.0  1.0  2.0  3.0
r4  4.0  5.0  6.0  7.0
r5  8.0  9.0 10.0 11.0
r6 12.0 13.0 14.0 15.0
In [15]: df.shift(periods=2,axis=0)
Out[15]:
    A   B   C   D
r1  NaN  NaN  NaN  NaN
r2  NaN  NaN  NaN  NaN
r3  0.0  1.0  2.0  3.0
r4  4.0  5.0  6.0  7.0
r5  8.0  9.0 10.0 11.0
r6 12.0 13.0 14.0 15.0

以上这篇浅谈pandas中shift和diff函数关系就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
详解Python迭代和迭代器
Mar 28 Python
Python进行数据提取的方法总结
Aug 22 Python
利用Python命令行传递实例化对象的方法
Nov 02 Python
Python中字典的setdefault()方法教程
Feb 07 Python
python使用筛选法计算小于给定数字的所有素数
Mar 19 Python
解决python3爬虫无法显示中文的问题
Apr 12 Python
Python3按一定数据位数格式处理bin文件的方法
Jan 24 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
python数据化运营的重要意义
Nov 25 Python
python 已知三条边求三角形的角度案例
Apr 12 Python
python中return不返回值的问题解析
Jul 22 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
使用DataFrame删除行和列的实例讲解
Apr 08 #Python
将字典转换为DataFrame并进行频次统计的方法
Apr 08 #Python
pandas创建新Dataframe并添加多行的实例
Apr 08 #Python
DataFrame中去除指定列为空的行方法
Apr 08 #Python
python 定时修改数据库的示例代码
Apr 08 #Python
对Python中DataFrame按照行遍历的方法
Apr 08 #Python
python2.6.6如何升级到python2.7.14
Apr 08 #Python
You might like
PHP序列化和反序列化深度剖析实例讲解
2020/12/29 PHP
prototype1.4中文手册
2006/09/22 Javascript
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
jqueyr判断checkbox组的选中(示例代码)
2013/11/08 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
javascript限制用户只能输汉字中文的方法
2014/11/20 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 图片库
2015/01/09 Javascript
Javascript中的几种继承方式对比分析
2016/03/22 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
jQuery加密密码到cookie的实现代码
2017/04/18 jQuery
给Easyui-Datebox设置隐藏或者不可用的解决方法
2017/05/26 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
vue使用laydate时间插件的方法
2018/11/14 Javascript
vue实现分页组件
2020/06/16 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
详解Vscode中使用Eslint终极配置大全
2019/11/08 Javascript
Js实现复选框的全选、全不选反选功能代码实例
2020/02/28 Javascript
vue实现购物车功能(商品分类)
2020/04/20 Javascript
[06:36]吞吞映像top1
2014/06/20 DOTA
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
Python实现Linux命令xxd -i功能
2016/03/06 Python
python 编程之twisted详解及简单实例
2017/01/28 Python
Python登录注册验证功能实现
2018/06/18 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
python os.listdir按文件存取时间顺序列出目录的实例
2018/10/21 Python
使用Python 统计高频字数的方法
2019/01/31 Python
解决django后台样式丢失,css资源加载失败的问题
2019/06/11 Python
Python如何批量获取文件夹的大小并保存
2020/03/31 Python
Python基于百度AI实现OCR文字识别
2020/04/02 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
美国在线轮胎零售商:SimpleTire
2019/04/08 全球购物
医院总经理岗位职责
2014/02/04 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
Goland使用Go Modules创建/管理项目的操作
2021/05/06 Golang
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript