浅谈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回调函数的使用方法
Jan 23 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
PyQt5每天必学之进度条效果
Apr 19 Python
python爬取网页转换为PDF文件
Jun 07 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
django的分页器Paginator 从django中导入类
Jul 25 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
python中count函数简单的实例讲解
Feb 06 Python
Django权限设置及验证方式
May 13 Python
Python scrapy爬取小说代码案例详解
Jul 09 Python
matplotlib自定义鼠标光标坐标格式的实现
Jan 08 Python
python函数指定默认值的实例讲解
Mar 29 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
有关JSON以及JSON在PHP中的应用
2010/04/09 PHP
jquery不支持toggle()高(新)版本的问题解决
2016/09/24 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
2017/03/08 PHP
ajax java 实现自动完成功能
2012/12/19 Javascript
jquery弹出关闭遮罩层实例
2013/08/06 Javascript
NodeJS学习笔记之MongoDB模块
2015/01/13 NodeJs
JavaScript控制按钮可用或不可用的方法
2015/04/03 Javascript
详解AngularJS中的表达式使用
2015/06/16 Javascript
浅析2种JavaScript继承方式
2015/12/04 Javascript
js实现遍历含有input的table实例
2015/12/07 Javascript
javascript表单处理具体实现代码(表单、链接、按钮)
2016/05/07 Javascript
Node.js的Koa框架上手及MySQL操作指南
2016/06/13 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
详解nodejs 文本操作模块-fs模块(二)
2016/12/22 NodeJs
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
jQuery实现列表的增加和删除功能
2018/06/14 jQuery
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
vue实现双向绑定和依赖收集遇到的坑
2018/11/29 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
用python实现的去除win下文本文件头部BOM的代码
2013/02/10 Python
使用Python的Flask框架实现视频的流媒体传输
2015/03/31 Python
Python实现在线程里运行scrapy的方法
2015/04/07 Python
python通过zabbix api获取主机
2018/09/17 Python
Flask核心机制之上下文源码剖析
2018/12/25 Python
python SVM 线性分类模型的实现
2019/07/19 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
Python爬虫自动化爬取b站实时弹幕实例方法
2021/01/26 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
香港礼品网站:GiftU eshop
2017/09/01 全球购物
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
应聘医药销售自荐书范文
2014/02/08 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
Pandas 数据编码的十种方法
2022/04/20 Python