rolling()的主要用途为进行移动均值计算,常用来对时间序列数据做均值操作。rolling()支持对Sries和DataFrame的操作。

一、函数定义

rolling()函数的定义如下:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None, step=None, method='single')

其中,

window:均值计算的窗口大小,>=0的整数。如果设置为N,假设当前为第M行,则计算从M-N+1至M行的算术平均值(行号M从1开始)。当(M-N+1)<1,则其值为NAN,即从第N行开始才有均值,1~(N-1)行的值为NAN。注意窗口大小取0时,所有结果均为NAN;取1时结果为计算的输入值。

min_periods:窗口总向前计算的最小数量,默认为等于window,表示与window相等。当window设置为N时,向前数据不足N行,则该行均值设置为NAN;当设置为1时,计算时会抛弃不存在的行。

center:设置window的计算结束位置,默认False,居右,即当前行为窗口中的最后一行。True为居中,表示当前行为窗口的中间位置。

win_type:指定窗口的类型,字符串类型,默认为None,对窗口内所有数据进行平均加权计算。可以指定窗口类型来获得不同的加权方式,窗口的类型包括boxcar、triang、blackman、hamming、bartlett等,可参考《Window functions》。在量化中通常是采用平均加权,使用默认值即可。

on: 可选参数。对于dataframe,可以指定需要操作的列名。

axis:0或者‘index’/1或者‘columns’,默认为0,即对某列数据进行计算;1为对某行数据进行计算。

例如,上面求收盘价的5日均值,axis=0,是对‘close’列的数据进行计算。

closed:定义窗口区间的开闭,支持int类型的window。默认值None表示左开右闭,即‘right‘。可以根据情况指定为‘left‘、‘both‘、‘neither‘等。这里简单解释下意思,假设N=5,那么‘right‘表示均值计算采用的数据包括当前行以及前4行。

step:1.5.0以上版本支持。按指定的step计算每个step处的加权平均值,默认为None,表示step为1。

method:1.3.0以上版本支持。计算均值的范围,字符串类型,’single’表示计算单独的列或者行,‘table‘为计算整个表。

其它未覆盖的内容请参考官方文档。

二、使用示例

(1)求N=5的加权平均值

df['MA5']=df['close'].rolling(5).mean()

(2)设置计算位置为’center=True’

df['PMA5']=df['close'].rolling(5,center=True).mean()

比较MA5和PMA5的值会发现,MA5的值从第5行开始不为NAN,而PMA5的值从第三行开始不为NAN,相当于将均值数据整体上移了2行。

(3)设置窗口区间开闭’closed=left’

df['PMA5']=df['close'].rolling(5,closed='left').mean()

closed=’right’时,均值有效数据从第5行开始;closed=’left’时,均值不包含当前行,因此有效数据从第6行开始。

三、与rolling()配合的常用函数

与rolling()配合使用的常用函数包括:

count:返回移动窗口中非NA观测值的数量。

max:返回移动窗口的最小值。

min:返回移动窗口的最大值。

diff:返回观测值的第一个离散差。

mean:返回移动窗口的均值。

median:返回移动窗口的中位数。

round:返回保留指定位数的观测值。

sum:返回移动窗口中观测值的总和。

std:返回移动窗口的标准差。

var:返回移动窗口的方差。

corr:移动窗口的相关系数。

abs:返回观测值的绝对值。

cov:计算数据样本的协方差矩阵。

skew:样本值的偏度(三阶矩),即数据分布的对称性。

kurt:样本值的峰度(四阶矩),即数据在均值附近分布的集中度。

describe:给出样本的基本描述(基本统计量如均值、标准差等)。

apply:对移动窗口中的值进行函数计算。

agg:在指定的轴上实现一个或多个操作。

cumsum:依次给出前1、2、… 、n个数的和。

cumprod:依次给出前1、2、… 、n个数的积。

cummax:依次给出前1、2、… 、n个数的最大值。

cummin:依次给出前1、2、… 、n个数的最小值。

其它可参考官方文档。

四、综合示例

1.计算前5日成交量

df['VOL']=df['volume'].rolling(5).sum()

2.后N行平均值计算

由于rolling的window参数只能为正,因此只能向前滑动,无法向后滑动。这里需要将dataframe反转后进行计算。

df['FMA10'] = df.iloc[::-1]['close'].rolling(10).mean()

3.计算5日价格之和的平方根

df['MA53']=df['close'].rolling(5).sum().apply(np.sqrt)

4.计算5日成交量均值的累积

df['MA54']=df['volume'].rolling(5).mean().cumsum()

5.对’close’列求均值同时对’volume’求和

df.rolling(3).agg({"volume": "sum", "close": "mean"})

以上只是列举了一下简单的例子,如何组合能够解决实际问题需要去实践。实际上DataFrame提供了相同丰富的函数,通过与移动平均rolling等功能联合使用,可以大大简化量化中的计算过程。

-----------------------------------

原创不易,请多支持!

rolling用法实例相关推荐

  1. python命令行参数解析OptionParser类用法实例

    python命令行参数解析OptionParser类用法实例 本文实例讲述了python命令行参数解析OptionParser类的用法,分享给大家供大家参考. 具体代码如下:     from opt ...

  2. php中 datalist,html5 datalist标签的用法是什么?这里有datalist标签的用法实例

    本篇文章主要为大家讲述了关于html5 datalist标签的用法及html5 datalist标签的用法实例.本文说了两个常用的选项框的实例供大家选择观看,下面就让我们一起来看这篇文章吧 我们先来看 ...

  3. python的for语句用法_python中list循环语句用法实例

    本文实例讲述了python中list循环语句用法.分享给大家供大家参考.具体用法分析如下: Python 的强大特性之一就是其对 list 的解析,它提供一种紧凑的方法,可以通过对 list 中的每个 ...

  4. CStopWatch计时器的用法实例

    CStopWatch计时器的用法实例 创建CStopWatch对象: CStopWatch m_runningtimeWatch; //定义一个计时器 定义一个装返回值的变量: double m_ru ...

  5. Go语言MD5加密用法实例

    Go语言MD5加密用法实例 本文实例讲述了Go语言MD5加密用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import (     "crypto/md5" ...

  6. python mysqldb cursor_python中MySQLdb模块用法实例

    转载自:http://www.jb51.net/article/57290.htm 姓名:梅金波                        学号:16010110036 [嵌牛导读]MySQLdb ...

  7. input type=range标签用法实例代码

    在HTML5中,又新增许多新<input>控件类型,比较实用的一个就是<input type="range">,以滑竿的方式来调整value值,在这以前需要 ...

  8. Union all的用法实例sql

    ---Union all的用法实例sql SELECT TOP (100) PERCENT ID, bid_user_id, UserName, amount, createtime, borrowT ...

  9. cube、rollup及exec的用法实例

    为什么80%的码农都做不了架构师?>>>    cube.rollup及exec的用法实例 select sdept 系部,sno 学号,max(sage) 最大年龄,   grou ...

最新文章

  1. Jquery中get函数
  2. 通过FxCop来验证.NET编码规范
  3. 为什么手机联系人里有permission_为什么有人在咖啡馆里不看手机不看电脑没有同伴,独自喝咖啡?...
  4. 帮你快速拿Offer!java面向对象程序设计实验报告
  5. 串行舵机/数字舵机的替代方案,低成本的舵机级联方案。数字舵机的驱动芯片。普通舵机改数字舵机
  6. 电脑指定区域旋转_诸城全自动旋转门批发,医用病房门,请看
  7. 最强数据库工具——IDEA
  8. 图片清晰度差怎么修复成高清图片
  9. 【Matlab】根据excel画折线图和柱状图
  10. 从含有数字的字符串中提取数字
  11. 谷歌工程师深度技术分析“为什么ios比android流畅
  12. 2015年12月学习计划
  13. org.zkoss.xel.XelException: Resource not found:
  14. scanner——04scaner进阶
  15. SMI-S 统一SAN管理
  16. 月GMV超3000万,中小商家如何跻身快手电商头部?
  17. MongoDB的安全认证
  18. Stream流的一些骚操作
  19. 基于激光雷达slam的无人车室内导航比较分析
  20. std::move的理解和使用

热门文章

  1. 深圳技术大学计算机专业分数线,深圳技术大学2020录取分数线(附2017-2020年分数线)...
  2. JavaWeb--RequestResponse
  3. 领航未来,2022 世界人工智能大会「元宇宙的数字原生进化」论坛等你来!
  4. 红帽linux安装docker,在CentOS7.6、红帽7.6系统中安装Docker:只需3条命令
  5. C++中pow()函数
  6. 大数据分析软技能有哪些
  7. ubuntu系统命令之关机、注销、重启
  8. 在单片机C语言中const是什么意思
  9. C盘根目录下只能创建文件夹不能新建文件的解决办法
  10. 4、外部中断(STM32)