pandas中时间窗函数rolling的使用
在建模过程中,我们常常需要需要对有时间关系的数据进行整理。比如我们想要得到某一时刻过去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科学计算笔记(十)pandas中时间、日期以及时间序列处理
Python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime. ...
- pandas入门: 时间字符串转换为年月日
pandas中时间字符串转换为年月日方法总结. 创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...
- 使用pandas时间窗口函数rolling完成量化交易之移动平均线
要想理解移动平均线,先来理解移动平均的概念.移动平均线.乖离率.相对强弱指数.均量线等技术指标都是在移动平均基础上建立起来的. 移动平均线<–移动平均数<–移动平均<–算术平均. 1 ...
- pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性
pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations).例如,计算两种商品销售额之间的3个月的滚动相关性 目录
- python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...
1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...
- python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...
1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...
- oracle 截取时间至小时,如何在pandas中构造/取整到小时的本地化日期时间列
我想把pandas python中本地化的datetime列截短/四舍五入到一小时.例如,如果我有2017-10-15 15:03:25+02:00,我希望获得2017-10-15 15 15:00: ...
- [转载] 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)
参考链接: Python中的时间函数 2(日期操作) 我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当 ...
- pandas中的freq和inferred_freq等时间参数究竟有哪些
1.背景描述 当我们用pandas在进行时间类数据的处理时,不可避免的就要接触到freq这个参数.如date_range等函数,如Datetimeindex.Period.DataFrame等对象都会 ...
最新文章
- getCacheDir() 和 getFilesDir() 的区别
- 编译可在Android上运行的qemu user mode
- golomb哥伦布编码——本质上就是通过0来区分商和余数
- VMware中装Win2012并配置Hyper-v
- spring源码学习之路---深入AOP(终)
- 让外网访问内网Ngrok工具
- Savitzky-Golay 滤波器详解及C/matlab语言程序设计
- 关于jQuery对象与DOM对象
- php empty();和isset();
- indices should be one-based and in ascending order
- 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)
- 环境配置与PyG中图与图数据集的使用
- 华为今日正式发布鸿蒙!中国人终于有了自己的手机操作系统
- Android 快速实现微信支付(真的!很快!)
- 索尼音乐牵手UNLEASH厂牌 实力新星LiCong李聪 Veegee正式加盟
- apicloud开发时的一些注意点
- 【剑指offer】Python、java,C++三种语言同时实现
- 数据集成之数据整合(Data Consolidation)
- Android 仿微信语音聊天,flutter项目结构
- 基于Openwrt 拨号上网(SDX55) (PCIe)移植文档
热门文章
- linux cp alias,linux基础之命令别名alias
- android 微信浮窗实现_Android仿微信视屏悬浮窗效果
- 玩客云搭建WordPress环境(lnmp)教程
- ROG 双系统安装+系统切换
- 数据库设计~电影院管理系统
- 【转】正确的硬盘分区方式
- 用服务器和共享服务器?
- html 输入框自动缩短 一行内显示,当屏幕缩小的时候,第二个input输入框为什么会移到下一行,如何让他在一行显示,自动弹出滚动条?...
- 安卓gps北斗搜星源码和导航工具支持安卓12无广告
- linux进入bios硬盘启动,Ubuntu 安装后不能进入bios解决