浅谈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操作MongoDB详解及实例
May 18 Python
Django框架的中的setting.py文件说明详解
Oct 15 Python
python实现贪吃蛇游戏
Mar 21 Python
django框架使用orm实现批量更新数据的方法
Jun 21 Python
python连接、操作mongodb数据库的方法实例详解
Sep 11 Python
python 生成器和迭代器的原理解析
Oct 12 Python
wxPython实现带颜色的进度条
Nov 19 Python
使用python实现希尔、计数、基数基础排序的代码
Dec 25 Python
python用opencv完成图像分割并进行目标物的提取
May 25 Python
Python 使用Opencv实现目标检测与识别的示例代码
Sep 08 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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的远程图片抓取函数分享
2013/09/25 PHP
PHP编写学校网站上新生注册登陆程序的实例分享
2016/03/21 PHP
js下写一个事件队列操作函数
2010/07/19 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
javascript 应用小技巧方法汇总
2015/07/05 Javascript
js模仿php中strtotime()与date()函数实现方法
2015/08/11 Javascript
javascript中的previousSibling和nextSibling的正确用法
2015/09/16 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
基于javascript bootstrap实现生日日期联动选择
2016/04/07 Javascript
jQuery自定义组件(导入组件)
2016/11/08 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
JS中的多态实例详解
2017/10/15 Javascript
AngularJS实现的根据数量与单价计算总价功能示例
2017/12/26 Javascript
React Native使用fetch实现图片上传的示例代码
2018/03/07 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
解决element UI 自定义传参的问题
2018/08/22 Javascript
JavaScript显式数据类型转换详解
2019/03/18 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
JQuery Ajax跨域调用和非跨域调用问题实例分析
2019/04/16 jQuery
layui实现根据table数据判断按钮显示情况的方法
2019/09/26 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
JS实现公告上线滚动效果
2021/01/10 Javascript
简单解决Python文件中文编码问题
2015/11/22 Python
详解Python最长公共子串和最长公共子序列的实现
2018/07/07 Python
Python selenium模块实现定位过程解析
2020/07/09 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
教育英语专业毕业生的求职信
2014/03/13 职场文书
自主招生教师推荐信
2014/05/10 职场文书
公司门卫工作职责
2014/06/28 职场文书
汽修专业自荐信
2014/07/07 职场文书
弄虚作假心得体会
2014/09/10 职场文书
大雁塔导游词
2015/02/04 职场文书
nginx lua 操作 mysql
2022/05/15 Servers
Win11 vmware不兼容怎么办?Win11与VMware虚拟机不兼容的解决方法
2023/01/09 数码科技