对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进程类subprocess的一些操作方法例子
Nov 22 Python
python批量生成本地ip地址的方法
Mar 23 Python
Python切片知识解析
Mar 06 Python
python 计算文件的md5值实例
Jan 13 Python
python flask几分钟实现web服务的例子
Jul 26 Python
利用pyecharts实现地图可视化的例子
Aug 12 Python
python数据类型之间怎么转换技巧分享
Aug 20 Python
python实现视频读取和转化图片
Dec 10 Python
快速查找Python安装路径方法
Feb 06 Python
python数据库操作mysql:pymysql、sqlalchemy常见用法详解
Mar 30 Python
Python判断字符串是否为空和null方法实例
Apr 26 Python
导致python中import错误的原因是什么
Jul 01 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 xml常用函数的集合(比较详细)
2013/06/06 PHP
thinkphp3.2.2前后台公用类架构问题分析
2014/11/25 PHP
php显示时间常用方法小结
2015/06/05 PHP
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
新浪的图片新闻效果
2007/01/13 Javascript
PNGHandler-借助JS让PNG图在IE下实现透明(包括背景图)
2007/08/31 Javascript
如何确保JavaScript的执行顺序 之实战篇
2011/03/03 Javascript
Node.js的特点和应用场景介绍
2014/11/04 Javascript
Javascript闭包(Closure)详解
2015/05/05 Javascript
Jquery全选与反选点击执行一次的解决方案
2015/08/14 Javascript
详解Vue 中 extend 、component 、mixins 、extends 的区别
2017/12/20 Javascript
搭建element-ui的Vue前端工程操作实例
2018/02/23 Javascript
Vue实现美团app的影院推荐选座功能【推荐】
2018/08/29 Javascript
浅谈JavaScript闭包
2019/04/09 Javascript
javascript数组元素删除方法delete和splice解析
2019/12/09 Javascript
Python中如何获取类属性的列表
2016/12/26 Python
Python使用回溯法子集树模板获取最长公共子序列(LCS)的方法
2017/09/08 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
python爬虫容易学吗
2020/06/02 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
Pycharm学生免费专业版安装教程的方法步骤
2020/09/24 Python
CSS3 实现footer 固定在底部(无论页面多高始终在底部)
2019/10/15 HTML / CSS
美国羽绒床上用品第一品牌:Pacific Coast
2018/08/25 全球购物
企业车辆管理制度
2014/01/24 职场文书
运动会广播稿500字
2014/01/28 职场文书
社会实践先进工作者事迹材料
2014/05/06 职场文书
软件售后服务承诺书
2014/05/21 职场文书
毕业生求职信
2014/06/10 职场文书
英语教研活动总结
2014/07/02 职场文书
求职意向书
2014/07/29 职场文书
2015教师年度考核评语
2015/03/25 职场文书
django注册用邮箱发送验证码的实现
2021/04/18 Python
TaiShan 200服务器安装Ubuntu 18.04的图文教程
2022/06/28 Servers
JS开发前端团队展示控制器来为成员引流
2022/08/14 Javascript