对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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
python网络爬虫采集联想词示例
Feb 11 Python
用Python编写分析Python程序性能的工具的教程
Apr 01 Python
在Python的Bottle框架中使用微信API的示例
Apr 23 Python
python基础教程之五种数据类型详解
Jan 12 Python
Python中使用logging和traceback模块记录日志和跟踪异常
Apr 09 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Python实现微信机器人的方法
Sep 06 Python
pytorch中的自定义反向传播,求导实例
Jan 06 Python
Python同时处理多个异常的方法
Jul 28 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python实现Word文档转换Markdown的示例
Dec 22 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
探讨:如何通过stats命令分析Memcached的内部状态
2013/06/14 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
php微信开发自定义菜单
2016/08/27 PHP
ArrayList类(增强版)
2007/04/04 Javascript
阻止JavaScript事件冒泡传递(cancelBubble 、stopPropagation)
2007/05/08 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
JS简单实现动画弹出层效果
2015/05/05 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
js 动态给元素添加、移除事件的实现方法
2016/07/19 Javascript
微信小程序 闭包写法详细介绍
2016/12/14 Javascript
jQuery插件ajaxFileUpload使用详解
2017/01/10 Javascript
JavaScript创建对象_动力节点Java学院整理
2017/06/27 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
简化vuex的状态管理方案的方法
2018/06/02 Javascript
VUE前后端学习tab写法实例
2019/08/06 Javascript
JavaScript中的this妙用实例分析
2020/05/09 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
对vuex中store和$store的区别说明
2020/07/24 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
Python实现的端口扫描功能示例
2018/04/08 Python
Python计算一个给定时间点前一个月和后一个月第一天的方法
2018/05/29 Python
Python 微信之获取好友昵称并制作wordcloud的实例
2019/02/21 Python
keras中的backend.clip用法
2020/05/22 Python
RentCars.com巴西:汽车租赁网站
2016/08/22 全球购物
我们是伦敦女孩:WalG
2018/01/08 全球购物
King Apparel官网:英国街头服饰品牌
2019/09/05 全球购物
Android interview questions
2016/12/25 面试题
道德模范先进事迹
2014/02/14 职场文书
初中生评语大全
2014/04/24 职场文书
委托书格式
2014/08/01 职场文书
认真学习保证书
2015/02/26 职场文书
投资合作意向书范本
2015/05/08 职场文书
大学生创业计划书
2019/06/24 职场文书
Python包管理工具pip的15 个使用小技巧
2021/05/17 Python
pytorch 实现在测试的时候启用dropout
2021/05/27 Python