浅谈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益智游戏计算汉诺塔问题示例
Mar 05 Python
Python中特殊函数集锦
Jul 27 Python
Python语法快速入门指南
Oct 12 Python
python3之微信文章爬虫实例讲解
Jul 12 Python
程序员的七夕用30行代码让Python化身表白神器
Aug 07 Python
正则给header的冒号两边参数添加单引号(Python请求用)
Aug 09 Python
python sklearn常用分类算法模型的调用
Oct 16 Python
Python实现字符串中某个字母的替代功能
Oct 21 Python
Django 批量插入数据的实现方法
Jan 12 Python
Python Numpy中数据的常用保存与读取方法
Apr 01 Python
如何理解python对象
Jun 21 Python
用Python实现屏幕截图详解
Jan 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+SQLite存储方案
2010/09/04 PHP
php 表单提交大量数据发生丢失的解决方法
2014/03/03 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
JS应用之禁止抓屏、复制、打印
2008/02/21 Javascript
jQuery操作 input type=checkbox的实现代码
2012/06/14 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
Javascript中的Callback方法浅析
2015/03/15 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
JavaScript进阶练习及简单实例分析
2016/06/03 Javascript
javascript之with的使用(阿里云、淘宝使用代码分析)
2016/10/11 Javascript
js中DOM三级列表(代码分享)
2017/03/20 Javascript
vue-router中的hash和history两种模式的区别
2018/07/17 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
Vue-Ant Design Vue-普通及自定义校验实例
2020/10/24 Javascript
在Python中使用M2Crypto模块实现AES加密的教程
2015/04/08 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python中elasticsearch插入和更新数据的实现方法
2018/04/01 Python
解决Pandas to_json()中文乱码,转化为json数组的问题
2018/05/10 Python
Anaconda 离线安装 python 包的操作方法
2018/06/11 Python
在Pycharm中调试Django项目程序的操作方法
2019/07/17 Python
在python中实现同行输入/接收多个数据的示例
2019/07/20 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
在ipython notebook中使用argparse方式
2020/04/20 Python
Java如何基于wsimport调用wcf接口
2020/06/17 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
CSS3制作苹果风格键盘特效
2015/02/26 HTML / CSS
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
美工的岗位职责
2013/11/14 职场文书
采购部部长岗位职责
2014/02/06 职场文书
教导处教学工作总结
2015/08/12 职场文书
思想工作总结范文
2015/08/12 职场文书
go原生库的中bytes.Buffer用法
2021/04/25 Golang
Python打包为exe详细教程
2021/05/18 Python
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
零基础学java之带返回值的方法的定义和调用
2022/04/10 Java/Android