pandas中的滚动窗口rolling函数和扩展窗口expanding函数

       在数据分析时,特别是在分析时间序列数据时,常会需要对一个序列进行固定长度窗口的滚动计算和分析,比如计算移动均线。只要是需要根据一个时序得到一个新的时序,就往往需要进行窗口滚动。在pandas中,DataFrame和Seies都有一个针对滚动窗口的函数,叫做rolling()。其具体的参数为:DataFrame.rolling(windowmin_periods=Nonecenter=Falsewin_type=Noneon=Noneaxis=0closed=None)

       其中参数window可以为一个正整数或者一个offset(可以认为是时间区间长度),通过这个参数设置窗口长度;min_periods表示窗口中需要的最小的观测值,如果窗口中的成员个数少于这个设定的值,则这个窗口经过计算后就会返回NaN,比如,如果min_periods设为3,但当前的窗口中只有两个成员,那么该窗口对应的位置就会返回空值;center参数如果设为True,表示在取窗口覆盖的区间时,以当前label为中心,向两边取,若为False,则表示以当前label为窗口的最右侧,向左侧取,默认为False,要注意的是,当为True时,如果窗口长度为奇数,则中心位置很好确定,就是最中间的位置,但是如果长度为偶数,则默认中心位置为中间偏右的那一个位置;win_type参数表示不同的窗口类型,可以通过这个参数给窗口成员赋予不同的权重,默认为等权重;on参数表示指定对某一列进行rolling,而不是默认的对index进行rolling,要注意的是,当指定on参数时,指定的列必须是时间序列,不然rolling函数就会失效。

       下面看一个简单的例子。下面的例子中,当窗口长度为3,设min_periods为2时,可知结果中第一个元素为NaN,因为第一个窗口只有一个值1,由于min_periods为2,所以至少需要包含两个数才行,故第一个值为空值,从第二个元素开始才有非空值,这就是min_periods参数的含义。当设置center为True时,如果窗口长度为偶数4,比如对于一个窗口[a,b,c,d],则中心值为中心偏右的那个位置,就是c,故此时第1个窗口覆盖的元素为1和2,所以和为3,如下所示。

import pandas as pd
import numpy as np
df=pd.DataFrame([1,2,3,5],columns=['a'])
df
	a
0	1
1	2
2	3
3	5

df.rolling(3,min_periods=2).sum()
         a
0	NaN
1	3.0
2	6.0
3	10.0

df.rolling(4,min_periods=2,center=True).sum()
         a
0	3.0
1	6.0
2	11.0
3	10.0

       rolling函数返回的是window对象或rolling子类,可以通过调用该对象的mean(),sum(),std(),count()等函数计算返回窗口的值,还可以通过该对象的apply(func)函数,通过自定义函数计算窗口的特定的值,具体可看文档

       从以上可以看出,rolling的窗口可以向前取值,向两边取值,但是没有向后取值,实际上只需要把原序列倒序排列后再向前取值就可以实现向后取值。下面我们再讲一下expanding函数,其为DataFrame.expanding(min_periods=1center=Falseaxis=0),其中参数的意义和rolling一样,只是其不是固定窗口长度,其长度是不断的扩大的。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值