浅谈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的Django框架使用入门指引
Apr 15 Python
浅谈Python2、Python3相对路径、绝对路径导入方法
Jun 22 Python
python找出完数的方法
Nov 12 Python
Python开发网站目录扫描器的实现
Feb 21 Python
Python使用字典实现的简单记事本功能示例
Aug 15 Python
python实现的发邮件功能示例
Sep 11 Python
python多线程并发及测试框架案例
Oct 15 Python
TensorFlow tf.nn.max_pool实现池化操作方式
Jan 04 Python
keras处理欠拟合和过拟合的实例讲解
May 25 Python
Python实现验证码识别
Jun 15 Python
python 爬取英雄联盟皮肤并下载的示例
Dec 04 Python
python 三种方法提取pdf中的图片
Feb 07 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+DBM的同学录程序(2)
2006/10/09 PHP
discuz安全提问算法
2007/06/06 PHP
php实现查询百度google收录情况(示例代码)
2013/08/02 PHP
ThinkPHP之用户注册登录留言完整实例
2014/07/22 PHP
php实现Linux服务器木马排查及加固功能
2014/12/29 PHP
PHP进行批量任务处理不超时的解决方法
2016/07/11 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
JavaScript中跨域调用Flash的方法
2014/08/11 Javascript
jQuery中addClass()方法用法实例
2015/01/05 Javascript
JS Ajax请求如何防止重复提交
2016/06/13 Javascript
jQuery实现可以编辑的表格实例详解【附demo源码下载】
2016/07/09 Javascript
JS实现简单易用的手机端浮动窗口显示效果
2016/09/07 Javascript
Node.js用readline模块实现输入输出
2016/12/16 Javascript
Javascript的this用法
2017/01/16 Javascript
vue 自动化路由实现代码
2019/09/03 Javascript
基于javascript实现贪吃蛇经典小游戏
2020/04/10 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
Openlayers绘制地图标注
2020/09/28 Javascript
Python实现将DOC文档转换为PDF的方法
2015/07/25 Python
Python网络编程详解
2017/10/31 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
python的命名规则知识点总结
2019/10/04 Python
Python实现使用dir获取类的方法列表
2019/12/24 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
美国在线旅行社:Crystal Travel
2018/09/11 全球购物
区三好学生主要事迹
2014/01/30 职场文书
外贸会计专业自荐信
2014/06/22 职场文书
社团活动总结模板
2014/06/30 职场文书
共青团员自我评价范文
2014/09/14 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
2014年大学教师工作总结
2014/12/02 职场文书
呼啸山庄读书笔记
2015/06/29 职场文书
七年级英语教学反思
2016/02/15 职场文书
nginx安装以及配置的详细过程记录
2021/09/15 Servers