对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统计文件行数示例分享
Feb 21 Python
Python中的choice()方法使用详解
May 15 Python
Python基础教程之正则表达式基本语法以及re模块
Mar 25 Python
Python文件夹与文件的相关操作(推荐)
Jul 25 Python
Tensorflow中使用tfrecord方式读取数据的方法
Jun 19 Python
python矩阵的转置和逆转实例
Dec 12 Python
Django中使用极验Geetest滑动验证码过程解析
Jul 31 Python
Python切图九宫格的实现方法
Oct 10 Python
关于numpy数组轴的使用详解
Dec 05 Python
Django之form组件自动校验数据实现
Jan 14 Python
pycharm快捷键汇总
Feb 14 Python
Python进行统计建模
Aug 10 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去掉字符串的最后一个字符附substr()的用法
2011/03/23 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
自定义php类(查找/修改)xml文档
2013/03/26 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
ThinkPHP中使用ajax接收json数据的方法
2014/12/18 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
PHP调用API接口实现天气查询功能的示例
2017/09/21 PHP
PHP中echo与print区别点整理
2021/03/09 PHP
得到form下的所有的input的js代码
2013/11/07 Javascript
JS图片无缝、平滑滚动代码
2014/03/11 Javascript
javascript简单实现图片预加载
2014/12/03 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
JavaScript更改原始对象valueOf的方法
2015/03/19 Javascript
js实现左侧网页tab滑动门效果代码
2015/09/06 Javascript
JavaScript计算器网页版实现代码分享
2016/07/15 Javascript
js中用cssText设置css样式的简单方法
2016/09/19 Javascript
Angular2 Service实现简单音乐播放器服务
2017/02/24 Javascript
webpack实现热加载自动刷新的方法
2017/07/30 Javascript
Angular2 自定义表单验证器的实现方法
2018/12/14 Javascript
Vuex的各个模块封装的实现
2020/06/05 Javascript
vue实现分页的三种效果
2020/06/23 Javascript
jQuery实现飞机大战小游戏
2020/07/05 jQuery
[47:03]Ti4第二日主赛事败者组 LGD vs iG 2
2014/07/21 DOTA
Python struct.unpack
2008/09/06 Python
Python进程通信之匿名管道实例讲解
2015/04/11 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
python读取几个G的csv文件方法
2019/01/07 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
少儿节目主持串词
2014/04/02 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
社会实践活动总结格式
2015/05/11 职场文书
详解Redis在SpringBoot工程中的综合应用
2021/10/16 Redis