对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系列之浅谈pickle模块封装和拆封数据对象的方法
May 23 Python
Python中为什么要用self探讨
Apr 14 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
Python实现包含min函数的栈
Apr 29 Python
详解使用python crontab设置linux定时任务
Dec 08 Python
Python中Selenium模拟JQuery滑动解锁实例
Jul 26 Python
Python二叉树的定义及常用遍历算法分析
Nov 24 Python
python判断数字是否是超级素数幂
Sep 27 Python
python连接mongodb集群方法详解
Feb 13 Python
Python如何使用ElementTree解析xml
Oct 12 Python
MoviePy简介及Python视频剪辑自动化
Dec 18 Python
python opencv常用图形绘制方法(线段、矩形、圆形、椭圆、文本)
Apr 12 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
玩转虚拟域名◎+ .
2006/10/09 PHP
PHP PDO函数库详解
2010/04/27 PHP
ThinkPHP模板自定义标签使用方法
2014/06/26 PHP
PHP中round()函数对浮点数进行四舍五入的方法
2014/11/19 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
mysql alter table命令修改表结构实例详解
2016/09/24 PHP
JS option location 页面跳转实现代码
2008/12/27 Javascript
Jquey拖拽控件Draggable使用方法(asp.net环境)
2010/09/28 Javascript
Ajax同步与异步传输的示例代码
2013/11/21 Javascript
Js表格万条数据瞬间加载实现代码
2014/02/20 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
JavaScript中instanceof运算符的使用示例
2016/06/08 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
JS日程管理插件FullCalendar中文说明文档
2017/02/06 Javascript
JavaScript实现替换字符串中最后一个字符的方法
2017/03/07 Javascript
JavaScript实现隐藏省略文字效果的方法
2017/04/27 Javascript
详解vue-router 2.0 常用基础知识点之导航钩子
2017/05/10 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
微信小程序自定义navigationBar顶部导航栏适配所有机型(附完整案例)
2020/04/26 Javascript
Python数字图像处理之霍夫线变换实现详解
2018/01/12 Python
解决Tensorflow使用pip安装后没有model目录的问题
2018/06/13 Python
程序员写Python时的5个坏习惯,你有几条?
2018/11/26 Python
python调用摄像头拍摄数据集
2019/06/01 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
Python Pillow(PIL)库的用法详解
2020/09/19 Python
Python环境使用OpenCV检测人脸实现教程
2020/10/19 Python
比利时香水网上商店:NOTINO
2018/03/28 全球购物
新东方旗下远程教育网站:新东方在线
2020/03/19 全球购物
新春文艺演出主持词
2014/03/27 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
会议简讯范文
2015/07/20 职场文书
幼儿园班级管理心得体会
2016/01/07 职场文书
靠谱准确的求职信
2019/04/02 职场文书
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers