浅谈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时间整形转标准格式的示例分享
Feb 14 Python
Python中字符串对齐方法介绍
May 21 Python
Python中取整的几种方法小结
Jan 06 Python
python使用arcpy.mapping模块批量出图
Mar 06 Python
[原创]使用豆瓣提供的国内pypi源
Jul 02 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
Django 跨域请求处理的示例代码
May 02 Python
微信小程序python用户认证的实现
Jul 29 Python
python装饰器练习题及答案
Nov 01 Python
如何在windows下安装Pycham2020软件(方法步骤详解)
May 03 Python
python利用appium实现手机APP自动化的示例
Jan 26 Python
Python的property属性详细讲解
Apr 11 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 分页分组类
2009/12/10 PHP
php定时计划任务的实现方法详解
2013/06/06 PHP
PHP实现简单日历类编写
2020/08/28 PHP
TNC vs IO BO3 第二场2.13
2021/03/10 DOTA
javascript while语句和do while语句的区别分析
2007/12/08 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
jQuery建立一个按字母顺序排列的友好页面索引(兼容IE6/7/8)
2013/02/26 Javascript
jquery实现checkbox全选全不选的简单实例
2013/12/31 Javascript
实用框架(iframe)操作代码
2014/10/23 Javascript
JavaScript中switch语句的用法详解
2015/06/03 Javascript
js实现人才网站职位选择功能的方法
2015/08/14 Javascript
基于JS实现密码框(password)中显示文字提示功能代码
2016/05/27 Javascript
javascript特殊文本输入框网页特效
2016/09/13 Javascript
JS正则验证多个邮箱完整实例【邮箱用分号隔开】
2017/04/19 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
详解Angular5/Angular6项目如何添加热更新(HMR)功能
2018/10/10 Javascript
详释JavaScript执行环境与执行栈
2019/04/02 Javascript
vue将文件/图片批量打包下载zip的教程
2020/10/21 Javascript
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
python二叉树遍历的实现方法
2013/11/21 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
python 文件查找及内容匹配方法
2018/10/25 Python
python 绘制拟合曲线并加指定点标识的实现
2019/07/10 Python
django echarts饼图数据动态加载的实例
2019/08/12 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
英国第一的市场和亚马逊替代品:OnBuy
2019/03/16 全球购物
Expedia西班牙:预订酒店、机票、旅行和廉价度假套餐
2019/04/10 全球购物
电气自动化自荐信
2013/10/10 职场文书
在职研究生自我鉴定
2013/10/16 职场文书
建筑专业毕业生推荐信
2013/11/21 职场文书
《值日生》教学反思
2014/02/17 职场文书
个人贷款承诺书
2014/03/28 职场文书
治超工作实施方案
2014/05/04 职场文书
2016年三八节红领巾广播稿
2015/12/17 职场文书
2019奶茶店创业计划书范本,值得你借鉴
2019/08/14 职场文书