对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 相关文章推荐
使用url_helper简化Python中Django框架的url配置教程
May 30 Python
python实现将英文单词表示的数字转换成阿拉伯数字的方法
Jul 02 Python
python中pandas.DataFrame对行与列求和及添加新行与列示例
Mar 12 Python
详解python列表生成式和列表生成式器区别
Mar 27 Python
Python读取stdin方法实例
May 24 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
Python类中的魔法方法之 __slots__原理解析
Aug 26 Python
Python3使用PySynth制作音乐的方法
Sep 09 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
python 实现体质指数BMI计算
May 26 Python
在 Python 中利用 Pool 进行多线程
Apr 24 Python
python使用BeautifulSoup 解析HTML
Apr 24 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中ob_start()函数的用法
2013/06/24 PHP
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
PHP mongodb操作类定义与用法示例【适合mongodb2.x和mongodb3.x】
2018/06/16 PHP
精心挑选的15个jQuery下拉菜单制作教程
2012/06/15 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
改变文件域的样式实现思路同时兼容ie、firefox
2013/10/23 Javascript
JavaScript中reduce()方法的使用详解
2015/06/09 Javascript
jQuery简单验证上传文件大小及类型的方法
2016/06/02 Javascript
带有定位当前位置的百度地图前端web api实例代码
2016/06/21 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
vue修改vue项目运行端口号的方法
2017/08/04 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
手把手教你vue-cli单页到多页应用的方法
2018/05/31 Javascript
小程序实现授权登陆的解决方案
2018/12/02 Javascript
[15:09]DOTA2国际邀请赛采访专栏:Loda
2013/08/06 DOTA
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
[01:09:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第一场 6.2
2018/06/04 DOTA
python 禁止函数修改列表的实现方法
2017/08/03 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
python验证码识别的示例代码
2017/09/21 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python3爬虫爬取百姓网列表并保存为json功能示例【基于request、lxml和json模块】
2018/12/05 Python
python 自定义对象的打印方法
2019/01/12 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
2019/10/24 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
什么是.net的Remoting技术
2016/07/08 面试题
优秀中专生推荐信
2013/11/17 职场文书
支教自我鉴定
2014/01/18 职场文书
教师旷工检讨书
2014/01/18 职场文书
师德师风学习材料
2014/12/19 职场文书
社区重阳节活动总结
2015/03/24 职场文书
《风娃娃》教学反思
2016/02/18 职场文书