浅谈pandas中shift和diff函数关系
时间:2019-04-14
本文章向大家介绍浅谈pandas中shift和diff函数关系,主要包括浅谈pandas中shift和diff函数关系使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
通过?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函数关系就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 架构师教你kill祖传石山代码重复/大量ifelse
- TKE集群,一次磁盘挂载问题处理
- Linux Load Average详解
- 5. Bean Validation声明式验证四大级别:字段、属性、容器元素、类
- 使用Docker镜像
- Qt音视频开发39-人脸识别在线版
- 前端学数据结构与算法(九):常见五种排序算法的实现及其优缺点
- 用最容易的方式学会单链表(Python实现)
- 突击并发编程JUC系列-万字长文解密 JUC 面试题
- 《剑指Offer》-- 题目一:找出数组中重复的数字(Python多种方法实现)
- 用最复杂的方式学会数组(Python实现动态数组)
- 一起来刷《剑指Offer》——不修改数组找出重复的数字(思路及Python实现)
- 第一章 Go介绍
- 第二章 Go变量
- 揭秘 @available