对pandas中时间窗函数rolling的使用详解


Posted in Python onNovember 28, 2018

在建模过程中,我们常常需要需要对有时间关系的数据进行整理。比如我们想要得到某一时刻过去30分钟的销量(产量,速度,消耗量等),传统方法复杂消耗资源较多,pandas提供的rolling使用简单,速度较快。

函数原型和参数说明

DataFrame.rolling(window, min_periods=None, freq=None, center=False, win_type=None, on=None, axis=0, closed=None)

window:表示时间窗的大小,注意有两种形式(int or offset)。如果使用int,则数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗的大小。pandas offset相关可以参考这里。

min_periods:最少需要有值的观测点的数量,对于int类型,默认与window相等。对于offset类型,默认为1。

freq:从0.18版本中已经被舍弃。

center:是否使用window的中间值作为label,默认为false。只能在window是int时使用。

# 为方便观察,并列排列

df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
df.rolling(3, min_periods=1).sum()
df.rolling(3, min_periods=1, center=True).sum()
 B B1 B2
0 0.0 0.0 1.0
1 1.0 1.0 3.0
2 2.0 3.0 3.0
3 NaN 3.0 6.0
4 4.0 6.0 4.0

win_type:窗口类型,默认为None一般不特殊指定,了解支持的其他窗口类型,参考这里。

on:对于DataFrame如果不使用index(索引)作为rolling的列,那么用on来指定使用哪列。

closed:定义区间的开闭,曾经支持int类型的window,新版本已经不支持了。对于offset类型默认是左开右闭的即默认为right。可以根据情况指定为left both等。

axis:方向(轴),一般都是0。

举例

一个简单的场景,从A向B运送东西,我们想看一下以3秒作为一个时间窗运送的量。

# A地有两个仓库,都运往B。
df = pd.DataFrame({'1': ['A1', 'A2', 'A1', 'A2', 'A2', 'A1', 'A2'],
     '2': ['B1', 'B1', 'B1', 'B1', 'B1', 'B1', 'B1'],
     'num': [1,2,1,3,4,2,1]}, 
     index = [pd.Timestamp('20130101 09:00:00'),
       pd.Timestamp('20130101 09:00:01'),
       pd.Timestamp('20130101 09:00:02'),
       pd.Timestamp('20130101 09:00:03'),
       pd.Timestamp('20130101 09:00:04'),
       pd.Timestamp('20130101 09:00:05'),
       pd.Timestamp('20130101 09:00:06')])
# 1 2 num
# 2013-01-01 09:00:00 A1 B1 1
# 2013-01-01 09:00:01 A2 B1 2
# 2013-01-01 09:00:02 A1 B1 1
# 2013-01-01 09:00:03 A2 B1 3
# 2013-01-01 09:00:04 A2 B1 4
# 2013-01-01 09:00:05 A1 B1 2
# 2013-01-01 09:00:06 A2 B1 1

使用rolling进行计算

# 首先我们先对groupby进行聚合(如果只有从A->B,那么不用聚合一个rolling就可以)
# 以9:00:04秒为例,由于时间窗是3s,默认的closed是right,所以我们相加04,03,02秒的num,共有4+3+0=7
df.groupby(['1', '2'])['num'].rolling('3s').sum()
# 1 2      
# A1 B1 2013-01-01 09:00:00 1.0
#   2013-01-01 09:00:02 2.0
#   2013-01-01 09:00:05 2.0
# A2 B1 2013-01-01 09:00:01 2.0
#   2013-01-01 09:00:03 5.0
#   2013-01-01 09:00:04 7.0
#   2013-01-01 09:00:06 5.0
# Name: num, dtype: float64

由于使用groupby,所以最后的结果是MultiIndex,想使用正常格式在DataFrame上使用reset_index()即可。

以上这篇对pandas中时间窗函数rolling的使用详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python网络编程之UDP通信实例(含服务器端、客户端、UDP广播例子)
Apr 25 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
Apr 08 Python
Python中文件操作简明介绍
Apr 13 Python
python实现的简单RPG游戏流程实例
Jun 28 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
python2 与 python3 实现共存的方法
Jul 12 Python
Pycharm之快速定位到某行快捷键的方法
Jan 20 Python
Python切片操作去除字符串首尾的空格
Apr 22 Python
Python3中_(下划线)和__(双下划线)的用途和区别
Apr 26 Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 Python
python 消费 kafka 数据教程
Dec 21 Python
解决python ThreadPoolExecutor 线程池中的异常捕获问题
Apr 08 Python
python 列表递归求和、计数、求最大元素的实例
Nov 28 #Python
使用python对文件中的数值进行累加的实例
Nov 28 #Python
python的concat等多种用法详解
Nov 28 #Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 #Python
python dataframe向下向上填充,fillna和ffill的方法
Nov 28 #Python
在python中只选取列表中某一纵列的方法
Nov 28 #Python
手把手教你如何安装Pycharm(详细图文教程)
Nov 28 #Python
You might like
PHP4中实现动态代理
2006/10/09 PHP
提高PHP性能的编码技巧以及性能优化详细解析
2013/08/24 PHP
FleaPHP框架数据库查询条件($conditions)写法总结
2016/03/19 PHP
PHP实现找出链表中环的入口节点
2018/01/16 PHP
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
JQuery中对服务器控件 DropdownList, RadioButtonList, CheckboxList的操作总结
2011/06/28 Javascript
javascript 动态修改css样式方法汇总(四种方法)
2015/08/27 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
Spring MVC中Ajax实现二级联动的简单实例
2016/07/06 Javascript
在Web项目中引入Jquery插件报错的完美解决方案(图解)
2016/09/19 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
Angular浏览器插件Batarang介绍及使用
2018/02/07 Javascript
Vue 全局loading组件实例详解
2018/05/29 Javascript
d3.js实现自定义多y轴折线图的示例代码
2018/05/30 Javascript
JavaScript解决浮点数计算不准确问题的方法分析
2018/07/09 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
一个计算身份证号码校验位的Python小程序
2014/08/15 Python
初步解析Python下的多进程编程
2015/04/28 Python
浅谈Python 对象内存占用
2016/07/15 Python
在IPython中执行Python程序文件的示例
2018/11/01 Python
Python中typing模块与类型注解的使用方法
2019/08/05 Python
python实现的config文件读写功能示例
2019/09/24 Python
pytorch 获取tensor维度信息示例
2020/01/03 Python
浅谈Python3实现两个矩形的交并比(IoU)
2020/01/18 Python
利用Python实现自动扫雷小脚本
2020/12/17 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
加拿大约会网站:EliteSingles.ca
2018/01/12 全球购物
清洁工表扬信
2014/01/08 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
八年级英语教学计划
2015/01/23 职场文书
学校教学工作总结2015
2015/05/19 职场文书
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL
Sql Server之数据类型详解
2022/02/28 SQL Server