pandas DataFrame.shift()函数
pandas DataFrame.shift()函数可以把数据移动指定的位数
period参数指定移动的步幅,可以为正为负.axis指定移动的轴,1为行,0为列.
eg: 有这样一个DataFrame数据:
import pandas as pd
data1 = pd.DataFrame({
'a': [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
'b': [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
})
print data1
a b
0 0 9
1 1 8
2 2 7
3 3 6
4 4 5
5 5 4
6 6 3
7 7 2
8 8 1
9 9 0
如果想让 a和b的数据都往下移动一位:
data2 = data1.shift(axis=0)
print data2
a b
0 NaN NaN
1 0.0 9.0
2 1.0 8.0
3 2.0 7.0
4 3.0 6.0
5 4.0 5.0
6 5.0 4.0
7 6.0 3.0
8 7.0 2.0
9 8.0 1.0
如果是在行上往右移动一位:
data3 = data1.shift(axis=1)
print data3
a b
0 NaN 0.0
1 NaN 1.0
2 NaN 2.0
3 NaN 3.0
4 NaN 4.0
5 NaN 5.0
6 NaN 6.0
7 NaN 7.0
8 NaN 8.0
9 NaN 9.0
如果想往上或者往左移动,可以指定(periods=-1):
data4 = data1.shift(periods=-1, axis=0)
print data4
a b
0 1.0 8.0
1 2.0 7.0
2 3.0 6.0
3 4.0 5.0
4 5.0 4.0
5 6.0 3.0
6 7.0 2.0
7 8.0 1.0
8 9.0 0.0
9 NaN NaN
一个例子:
这里有一组某车站各个小时的总进站人数和总出站人数的数据:
entries_and_exits = pd.DataFrame({
'ENTRIESn': [3144312, 3144335, 3144353, 3144424, 3144594,
3144808, 3144895, 3144905, 3144941, 3145094],
'EXITSn': [1088151, 1088159, 1088177, 1088231, 1088275,
1088317, 1088328, 1088331, 1088420, 1088753]
})
要求计算每个小时该车站进出站人数
思路: 把第n+1小时的总人数-第n小时的总人数,就是这个小时里的进出站人数
entries_and_exits_hourly = entries_and_exits - entries_and_exits.shift(axis=0)print(entries_and_exits_hourly.fillna(0)) #最后用0来填补NaN
ENTRIESn EXITSn
0 0.0 0.0
1 23.0 8.0
2 18.0 18.0
3 71.0 54.0
4 170.0 44.0
5 214.0 42.0
6 87.0 11.0
7 10.0 3.0
8 36.0 89.0
9 153.0 333.0
pandas DataFrame.shift()函数的更多相关文章
- pandas DataFrame apply()函数(1)
之前已经写过pandas DataFrame applymap()函数 还有pandas数组(pandas Series)-(5)apply方法自定义函数 pandas DataFrame 的 app ...
- pandas DataFrame apply()函数(2)
上一篇pandas DataFrame apply()函数(1)说了如何通过apply函数对DataFrame进行转换,得到一个新的DataFrame. 这篇介绍DataFrame apply()函数 ...
- pandas DataFrame applymap()函数
pandas DataFrame的 applymap() 函数可以对DataFrame里的每个值进行处理,然后返回一个新的DataFrame: import pandas as pd df = pd. ...
- [Python Study Notes]pandas.DataFrame.plot()函数绘图
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- python重要的第三方库pandas模块常用函数解析之DataFrame
pandas模块常用函数解析之DataFrame 关注公众号"轻松学编程"了解更多. 以下命令都是在浏览器中输入. cmd命令窗口输入:jupyter notebook 打开浏览器 ...
- Lesson4——Pandas DataFrame结构
pandas目录 思维导图 1 简介 DataFrame 是 Pandas 的重要数据结构之一,也是在使用 Pandas 进行数据分析过程中最常用的结构之一. 2 认识DataFrame结构 Data ...
- pandas.DataFrame的pivot()和unstack()实现行转列
示例: 有如下表需要进行行转列: 代码如下: # -*- coding:utf-8 -*- import pandas as pd import MySQLdb from warnings impor ...
- 把pandas dataframe转为list方法
把pandas dataframe转为list方法 先用numpy的 array() 转为ndarray类型,再用tolist()函数转为list
- Pandas Dataframe增、删、改、查、去重、抽样基本操作
总括 pandas的索引函数主要有三种: loc 标签索引,行和列的名称 iloc 整型索引(绝对位置索引),绝对意义上的几行几列,起始索引为0 ix 是 iloc 和 loc的合体 at是loc的快 ...
随机推荐
- hdu 2005 求第几天(水题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2005 转载于:https://blog.csdn.net/tigerisland45/article/ ...
- python套接字编程基础
python套接字编程 目录 socket是什么 套接字的工作流程 基于tcp的套接字 基于udp的套接字 socket是什么 客户端/服务器架构(C/S架构) 服务端:提供服务的一端 客户端:请求服 ...
- xadmin2.0(for Django2.0) 基本设置
一.下载xadmin 1.使用安装工具安装: pip install git+git://github.com/sshwsfc/xadmin.git@django2 2.下载源码: git clone ...
- Jmeter脚本录制方法(二)手工编写脚本(jmeter与fiddler结合使用)
jmeter脚本录制方法可以分三种,前几天写的一篇文章中,已介绍了前两种,今天来说下第三种,手工编写脚本,建议使用这一种方法,虽然写的过程有点繁琐,但调试脚本比前两者方式都要便捷. 首先来看下三种方式 ...
- 进程间通信(IPC)
1.什么是进程间通信 通俗来讲,进程间通信就是:多个进程之间的数据交互 进程都有自己独立的虚拟地址空间,导致进程之间的数据交互变得十分困难,通信复杂了,但是安全性提高了: 进程间通信的本质:多个进程之 ...
- Java 复习
基础: JAVA基础扎实,理解io.多线程.集合等基础框架,对JVM原理有一定的了解: 熟读Java SDK源码: 框架: 对Spring,ibatis,struts等开源框架熟悉:
- vue 解决双向绑定中 父组件传值给子组件后 父组件值也跟着变化的问题
说明: 近日开发中碰见一个很诡异的问题, 父组件动态的修改对象 data 中的值, 然后将这个对象 data 传给子组件, 子组件拿到后将 data 中的值 乘以 100 ,发现父组件中的值也跟着变 ...
- Linux启动详解
<概述> Linux启动大致分为一下几个步骤,详细的启动步骤在<启动分析>中详解. 1:首先bios加电自检,初始化(这个过程会检测相关硬件(cpu,内存,显卡,硬盘等)) 2 ...
- C# abstract virtual override new finally java final finalize
virtual:声明虚方法.可以被其派生类所重写的.重写方法需要使用override或者new关键字. override:覆盖原方法.可对重写virtual.override.abstract进行重写 ...
- 利用VS2008编译器编译Qt4.8.2的MySQL驱动
准备:安装VS2008和Qt 4.8.2,并且设置环境变量(QTDIR=C:\Qt\4.8.2 和 path+=C:\Qt\4.8.2\bin) 一.下载mysql数据库,安装(完全安装)到C盘根目录 ...