浅谈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利用pyHook实现监听用户鼠标与键盘事件
Aug 21 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
Python从list类型、range()序列简单认识类(class)【可迭代】
May 31 Python
python利用re,bs4,requests模块获取股票数据
Jul 29 Python
解决Djang2.0.1中的reverse导入失败的问题
Aug 16 Python
Python实现串口通信(pyserial)过程解析
Sep 25 Python
Pyqt5自适应布局实例
Dec 13 Python
python文件绝对路径写法介绍(windows)
Dec 25 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Python内置函数及功能简介汇总
Oct 13 Python
python 用递归实现通用爬虫解析器
Apr 16 Python
Python调用腾讯API实现人脸身份证比对功能
Apr 04 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
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
2007/09/30 PHP
Ajax+PHP 边学边练之四 表单
2009/11/27 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
2013/08/10 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
如何在PHP中使用AES加密算法加密数据
2020/06/24 PHP
JQuery AJAX实现目录浏览与编辑的代码
2008/10/21 Javascript
细说javascript函数从函数的构成开始
2013/08/29 Javascript
AngularJS基础学习笔记之指令
2015/05/10 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
AngularJS单选框及多选框实现双向动态绑定
2016/01/13 Javascript
Nodejs中session的简单使用及通过session实现身份验证的方法
2016/02/04 NodeJs
基于jQuery实现咖啡订单管理简单应用
2017/02/10 Javascript
vue项目中vue-i18n和element-ui国际化开发实现过程
2018/04/25 Javascript
vue项目,代码提交至码云,iconfont的用法说明
2020/07/30 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
[01:34]2014DOTA2 TI预选赛预选赛 选手比赛房大揭秘!
2014/05/20 DOTA
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
python利用beautifulSoup实现爬虫
2014/09/29 Python
python 写的一个爬虫程序源码
2016/02/28 Python
python去除文件中空格、Tab及回车的方法
2016/04/12 Python
bat和python批量重命名文件的实现代码
2016/05/19 Python
Python编程实现输入某年某月某日计算出这一天是该年第几天的方法
2017/04/18 Python
Django之无名分组和有名分组的实现
2019/04/16 Python
python flask框架实现传数据到js的方法分析
2019/06/11 Python
python的等深分箱实例
2019/11/22 Python
Python OpenCV读取显示视频的方法示例
2020/02/20 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
python 基于opencv 绘制图像轮廓
2020/12/11 Python
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
假释思想汇报范文
2014/10/11 职场文书
教师求职简历自我评价
2015/03/10 职场文书
CSS3 菱形拼图实现只旋转div 背景图片不旋转功能
2021/03/30 HTML / CSS
Python基础之进程详解
2021/05/21 Python
MySQL主从切换的超详细步骤
2022/06/28 MySQL