对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对指定目录下文件进行批量重命名的方法
Apr 18 Python
详细解读Python中解析XML数据的方法
Oct 15 Python
python中的编码知识整理汇总
Jan 26 Python
Python自定义函数定义,参数,调用代码解析
Dec 27 Python
Python Unittest自动化单元测试框架详解
Apr 04 Python
使用Python获取网段IP个数以及地址清单的方法
Nov 01 Python
python 检查文件mime类型的方法
Dec 08 Python
解决python xlrd无法读取excel文件的问题
Dec 25 Python
python实现Dijkstra静态寻路算法
Jan 17 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
Oct 10 Python
Django 再谈一谈json序列化
Mar 16 Python
python实现密度聚类(模板代码+sklearn代码)
Apr 27 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
PHP 文件上传功能实现代码
2009/06/24 PHP
利用PHP实现短域名互转
2013/07/05 PHP
php接口数据加密、解密、验证签名
2015/03/12 PHP
php简单统计在线人数的方法
2016/05/10 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
PHP接入微信H5支付的方法示例
2019/10/28 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
几个比较实用的JavaScript 测试及效验工具
2010/04/18 Javascript
使用jquery实现简单的ajax
2013/07/08 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
浅谈js中对象的使用
2016/08/11 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
vue单页面打包文件大?首次加载慢?nginx带你飞,从7.5M到1.3M蜕变过程(推荐)
2018/01/16 Javascript
深入浅出了解Node.js Streams
2019/05/27 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
python实现socket客户端和服务端简单示例
2014/02/24 Python
python中常用检测字符串相关函数汇总
2015/04/15 Python
python处理xml文件的方法小结
2017/05/02 Python
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
Python Socket TCP双端聊天功能实现过程详解
2020/06/15 Python
HTML5实现晶莹剔透的雨滴特效
2014/05/14 HTML / CSS
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
购买原创艺术品:Zatista
2019/11/09 全球购物
仓库主管的岗位职责
2013/12/04 职场文书
旷课检讨书1000字
2014/02/14 职场文书
《每逢佳节倍思亲》教后反思
2014/04/19 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
七年级生物教学反思
2016/02/20 职场文书