图解pandas的窗口函数rolling

本片文章主要参考了该作者的图和内容:

原文链接: 图解pandas的窗口函数rolling-腾讯云开发者社区-腾讯云

1.创建数据

import numpy as np
import pandas as pd
data = pd.DataFrame({"col1": np.arange(10)})
data

 数据如下

rolling参数 

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

  • window:表示时间窗口的大小;可省略不写。两种形式:int和offset。如果使用int,数值表示计算统计量的观测值的数量即向前几个数据。如果是offset类型,表示时间窗口的大小
  • min_periods:每个窗口内最少包含的观测值的数量,如果小于这个值的窗口,则结果为NA。值可以是int,默认Noneoffset情况下,默认为1。offset类型是专门针对时间类型
  • center: 把窗口的标签设置为居中。布尔类型,默认False,向右对齐。
  • win_type:窗口的类型。截取窗的各种函数。字符串类型,默认为None
  • on:可选参数;对于dataframe而言,指定要计算滚动窗口的列,值可以是dataframe中的列名。
  • axis:int或者字符串;如果是0或者index,则按照行进行计算,如果是1或者columns,则按照列进行计算。默认是0,即对列进行计算
  • closed:用于定义区间的开闭,支持int类型的窗口window。对于offset类型默认是左开右闭,即默认为right,也可以根据具体的情况指定为left,both等

 一般在使用了移动窗口函数rolling之后,我们需要配合使用相关的统计函数,比如sum、mean、max等。使用最多的是mean函数,生成移动平均值。下面汇总了常用的统计相关函数:

方法

描述

count()

统计非空数量

sum()

求和

mean()

求均值

median()

求中位数

min()

最小值

max()

最大值

std()

求标准差

var()

有偏方差

skew()

偏度

kurt()

峰度

quantile()

求四分位数

apply()

apply函数使用

cov()

无偏方差

corr()

相关系数

window参数

使用N个滑动窗口,计算平均值。

closed参数:

取值可以为right、left、both和neither

官网的详细解释:

  • right:窗口中的第一个数据点从计算中删除(excluded)
  • left:窗口中的最后一个数据点从计算中删除
  • both:不删除或者排除任何数据点
  • neither:第一个和最后一个数据点从计算中删除

min_periods参数:

表示的是窗口里面的最小元素数量。min_periods必须小于等于window值,当达到min_periods时就可进行窗口统计计算。

代码如下:

data.rolling(window = 3).mean()   # 求均值,其默认closed = right

#等效于

data.rolling(window = 3, closed="right").mean()

图解就是:

所以实际上window = 3, 需要考虑的是前三个数据加本身的数据点,拿data[1]来说,就是需要考虑的是[Nan,Nan,0,1],但是由于设置closed = right,所以不计算第一个数据点实际是(Nan+0+1) / 3=Nan。(Nan(x),表示不参与计算)

此时要插一句,pandas或者numpy中的np.nan空值与其他数值相乘或者相加都是nan:

所以不难理解closed = left的结果 :

data.rolling(3, closed="left").mean()  

再来看一下closed = both的结果:

data.rolling(3,closed="both").mean()  

此时计算结果,看几个特殊计算点:

data[2] = (Nan+0+1+2)/3 但是此时窗口数是3,因此可以计算均值

data[3] = (0+1+2+3)/4

再看一个例子:

data.rolling(3,min_periods=2,closed="both").mean()  

看一个特殊计算点其跟原先不变:

data[1] = 0+1/2=0.5

所以总结一下就是:满足min_periods就可以计算,满足窗口大小也可以计算,除数要根据实际计算的数据个数来确定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值