在建模过程中,我们常常需要需要对有时间关系的数据进行整理。比如我们想要得到某一时刻过去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的使用相关推荐

  1. python科学计算笔记(十)pandas中时间、日期以及时间序列处理

    Python标准库包含于日期(date)和时间(time)数据的数据类型,datetime.time以及calendar模块会被经常用到. datetime以毫秒形式存储日期和时间,datetime. ...

  2. pandas入门: 时间字符串转换为年月日

    pandas中时间字符串转换为年月日方法总结. 创建一个dataframe df = pd.DataFrame(['2019-12-09', '2019-12-02'], columns=[" ...

  3. 使用pandas时间窗口函数rolling完成量化交易之移动平均线

    要想理解移动平均线,先来理解移动平均的概念.移动平均线.乖离率.相对强弱指数.均量线等技术指标都是在移动平均基础上建立起来的. 移动平均线<–移动平均数<–移动平均<–算术平均. 1 ...

  4. pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations)、例如,计算两种商品销售额之间的3个月的滚动相关性

    pandas中使用rolling.corr函数计算两个时间序列数据列之间的滚动相关性(Rolling correlations).例如,计算两种商品销售额之间的3个月的滚动相关性 目录

  5. python时间函数报错_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  6. python获取系统时间函数_python3中datetime库,time库以及pandas中的时间函数区别与详解...

    1介绍datetime库之前 我们先比较下time库和datetime库的区别 先说下time 在 Python 文档里,time是归类在Generic Operating System Servic ...

  7. oracle 截取时间至小时,如何在pandas中构造/取整到小时的本地化日期时间列

    我想把pandas python中本地化的datetime列截短/四舍五入到一小时.例如,如果我有2017-10-15 15:03:25+02:00,我希望获得2017-10-15 15 15:00: ...

  8. [转载] 整理总结 python 中时间日期类数据处理与类型转换(含 pandas)

    参考链接: Python中的时间函数 2(日期操作) 我自学 python 编程并付诸实战,迄今三个月. pandas可能是我最高频使用的库,基于它的易学.实用,我也非常建议朋友们去尝试它.--尤其当 ...

  9. pandas中的freq和inferred_freq等时间参数究竟有哪些

    1.背景描述 当我们用pandas在进行时间类数据的处理时,不可避免的就要接触到freq这个参数.如date_range等函数,如Datetimeindex.Period.DataFrame等对象都会 ...

最新文章

  1. getCacheDir() 和 getFilesDir() 的区别
  2. 编译可在Android上运行的qemu user mode
  3. golomb哥伦布编码——本质上就是通过0来区分商和余数
  4. VMware中装Win2012并配置Hyper-v
  5. spring源码学习之路---深入AOP(终)
  6. 让外网访问内网Ngrok工具
  7. Savitzky-Golay 滤波器详解及C/matlab语言程序设计
  8. 关于jQuery对象与DOM对象
  9. php empty();和isset();
  10. indices should be one-based and in ascending order
  11. 二、MySQL连接查询学习笔记(多表连接查询:内连接,外连接,交叉连接详解)
  12. 环境配置与PyG中图与图数据集的使用
  13. 华为今日正式发布鸿蒙!中国人终于有了自己的手机操作系统
  14. Android 快速实现微信支付(真的!很快!)
  15. 索尼音乐牵手UNLEASH厂牌 实力新星LiCong李聪 Veegee正式加盟
  16. apicloud开发时的一些注意点
  17. 【剑指offer】Python、java,C++三种语言同时实现
  18. 数据集成之数据整合(Data Consolidation)
  19. Android 仿微信语音聊天,flutter项目结构
  20. 基于Openwrt 拨号上网(SDX55) (PCIe)移植文档

热门文章

  1. linux cp alias,linux基础之命令别名alias
  2. android 微信浮窗实现_Android仿微信视屏悬浮窗效果
  3. 玩客云搭建WordPress环境(lnmp)教程
  4. ROG 双系统安装+系统切换
  5. 数据库设计~电影院管理系统
  6. 【转】正确的硬盘分区方式
  7. 用服务器和共享服务器?
  8. html 输入框自动缩短 一行内显示,当屏幕缩小的时候,第二个input输入框为什么会移到下一行,如何让他在一行显示,自动弹出滚动条?...
  9. 安卓gps北斗搜星源码和导航工具支持安卓12无广告
  10. linux进入bios硬盘启动,Ubuntu 安装后不能进入bios解决