对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探索之爬取电商售卖信息代码示例
Oct 27 Python
浅谈pycharm出现卡顿的解决方法
Dec 03 Python
Python中常用的内置方法
Jan 28 Python
Python2 Selenium元素定位的实现(8种)
Feb 25 Python
python3使用matplotlib绘制散点图
Mar 19 Python
python的set处理二维数组转一维数组的方法示例
May 31 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
Django自定义用户登录认证示例代码
Jun 30 Python
django框架中间件原理与用法详解
Dec 10 Python
python 异步async库的使用说明
May 04 Python
基于Python 函数和方法的区别说明
Mar 24 Python
基于python的matplotlib制作双Y轴图
Apr 20 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中的CMS的涵义
2007/03/11 PHP
关于svn冲突的解决方法
2013/06/21 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
2014/06/23 PHP
phpQuery让php处理html代码像jQuery一样方便
2015/01/06 PHP
PHP中的traits实现代码复用使用实例
2015/05/13 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
jQuery中获取checkbox选中项等操作及注意事项
2013/11/24 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
Vue.js组件tree实现无限级树形菜单
2016/12/02 Javascript
原生js实现轮播图的示例代码
2017/02/20 Javascript
JS简单判断滚动条的滚动方向实现方法
2017/04/28 Javascript
jQuery正则验证注册页面经典实例
2017/06/10 jQuery
JavaScript如何对图片进行黑白化
2018/04/10 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
vue 项目 iOS WKWebView 加载
2019/04/17 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
Vue(定时器)解决mounted不能获取到data中的数据问题
2020/07/30 Javascript
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
Python遍历某目录下的所有文件夹与文件路径
2018/03/15 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
详解Django配置优化方法
2019/11/18 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
美国最好的葡萄酒网上商店:Wine Library
2019/11/02 全球购物
销售业务员岗位职责
2014/01/29 职场文书
护理毕业生自我鉴定
2014/02/11 职场文书
公司委托书格式范文
2014/04/04 职场文书
供货协议书
2014/04/22 职场文书
高考励志标语
2014/06/05 职场文书
导游欢迎词范文
2015/01/23 职场文书
教师节简报
2015/07/20 职场文书