对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使用7z解压软件备份文件脚本分享
Feb 21 Python
python写xml文件的操作实例
Oct 05 Python
粗略分析Python中的内存泄漏
Apr 23 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
机器学习的框架偏向于Python的13个原因
Dec 07 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
基于多进程中APScheduler重复运行的解决方法
Jul 22 Python
python实现PCA降维的示例详解
Feb 24 Python
Python实现清理微信僵尸粉功能示例【基于itchat模块】
May 29 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
python map比for循环快在哪
Sep 21 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中全局变量global和$GLOBALS[]的区别分析
2012/08/06 PHP
smarty中常用方法实例总结
2015/08/07 PHP
jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
2015/10/22 PHP
php fread读取文件注意事项
2016/09/24 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
js获取元素相对窗口位置的实现代码
2014/09/28 Javascript
jQuery中prevAll()方法用法实例
2015/01/08 Javascript
jQuery层动画定位滑动效果的方法
2015/04/30 Javascript
聊一聊JavaScript作用域和作用域链
2016/05/03 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
Angular.js中$apply()和$digest()的深入理解
2016/10/13 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
详解使用jQuery.i18n.properties实现js国际化
2018/05/04 jQuery
基于Vue-cli快速搭建项目的完整步骤
2018/11/03 Javascript
vue2.0 如何在hash模式下实现微信分享
2019/01/22 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
uni-app 组件里面获取元素宽高的实现
2019/12/27 Javascript
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
python3 读写文件换行符的方法
2018/04/09 Python
python调用OpenCV实现人脸识别功能
2018/05/25 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Python中利用LSTM模型进行时间序列预测分析的实现
2019/07/26 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
HTML5 创建canvas元素示例代码
2014/06/04 HTML / CSS
会计主管岗位职责范文
2013/11/08 职场文书
机电专业毕业生推荐信
2013/11/10 职场文书
创建卫生先进单位实施方案
2014/03/10 职场文书
开学典礼主持词
2014/03/19 职场文书
业务内勤岗位职责
2014/04/30 职场文书
2014年学前班工作总结
2014/12/08 职场文书
幼儿园大班教师个人工作总结
2015/02/05 职场文书
给老师的保证书怎么写
2015/05/09 职场文书
创业计划书之花店
2019/09/20 职场文书
uwsgi+nginx代理Django无法访问静态资源的解决
2021/05/10 Servers
PyTorch 如何自动计算梯度
2021/05/23 Python