浅谈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多线程编程(二):启动线程的两种方法
Apr 05 Python
用python 批量更改图像尺寸到统一大小的方法
Mar 31 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
python3+selenium实现qq邮箱登陆并发送邮件功能
Jan 23 Python
彻底理解Python中的yield关键字
Apr 01 Python
python实现QQ批量登录功能
Jun 19 Python
python matplotlib 画dataframe的时间序列图实例
Nov 20 Python
Python实现中值滤波去噪方式
Dec 18 Python
pandas 对group进行聚合的例子
Dec 27 Python
python实现俄罗斯方块小游戏
Apr 24 Python
Pycharm快捷键配置详细整理
Oct 13 Python
python pygame入门教程
Jun 01 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
thinkPHP模型初始化实例分析
2015/12/03 PHP
PHP解决中文乱码
2017/04/28 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
10款非常有用的 Ajax 插件分享
2012/03/14 Javascript
推荐30个新鲜出炉的精美 jQuery 效果
2012/03/26 Javascript
jquery模拟LCD 时钟的html文件源代码
2014/06/16 Javascript
javascript转换日期字符串为Date日期对象的方法
2015/02/13 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
基于HTML5+JS实现本地图片裁剪并上传功能
2017/03/24 Javascript
ES6新数据结构Set与WeakSet用法分析
2017/03/31 Javascript
jquery请求servlet实现ajax异步请求的示例
2017/06/03 jQuery
vue获取当前点击的元素并传值的实例
2018/03/09 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
taro 实现购物车逻辑的实例代码
2020/06/05 Javascript
小程序实现上下切换位置
2020/11/16 Javascript
js加减乘除精确运算方法实例代码
2021/01/17 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
[51:36]EG vs VP 2018国际邀请赛淘汰赛BO3 第一场 8.24
2018/08/25 DOTA
python使用内存zipfile对象在内存中打包文件示例
2014/04/30 Python
Python批量转换文件编码格式
2015/05/17 Python
Python遍历目录中的所有文件的方法
2016/07/08 Python
Python字符串格式化%s%d%f详解
2018/02/02 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python 制作本地应用搜索工具
2021/02/27 Python
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
美国Max仓库:Max Warehouse
2020/05/31 全球购物
委托书范文
2014/04/02 职场文书
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
农业开发项目建议书
2014/05/16 职场文书
工程项目经理任命书
2014/06/05 职场文书
新手上路标语
2014/06/20 职场文书
2015幼儿园庆元旦活动方案
2014/12/09 职场文书
适合青年人白手起家的创业项目分享
2019/08/16 职场文书
windows下快速安装nginx并配置开机自启动的方法
2021/05/11 Servers
SQL试题 使用窗口函数选出连续3天登录的用户
2022/04/24 Oracle