12-python-pandas-window

12. Pandas高级教程之:window操作

简介

在数据统计中,经常需要进行一些范围操作,这些范围我们可以称之为一个window 。Pandas提供了一个rolling方法,通过滚动window来进行统计计算。

本文将会探讨一下rolling中的window用法。

滚动窗口

我们有5个数,我们希望滚动统计两个数的和,那么可以这样:

In [1]: s = pd.Series(range(5))

In [2]: s.rolling(window=2).sum()
Out[2]: 
0    NaN
1    1.0
2    3.0
3    5.0
4    7.0
dtype: float64

rolling 对象可以通过for来遍历:

pandas中有四种window操作,我们看下他们的定义:

名称

方法

返回对象

是否支持时间序列

是否支持链式groupby操作

固定或者可滑动的窗口

rolling

Rolling

Yes

Yes

scipy.signal库提供的加权非矩形窗口

rolling

Window

No

No

累积值的窗口

expanding

Expanding

No

Yes

值上的累积和指数加权窗口

ewm

ExponentialMovingWindow

No

Yes (as of version 1.2)

​ 看一个基于时间rolling的例子:

设置min_periods可以指定window中的最小的NaN的个数:

Center window

默认情况下window的统计是以最右为准,比如window=5,那么前面的0,1,2,3 因为没有达到5,所以为NaN。

可以对这种方式进行修改,设置 center=True 可以从中间统计:

Weighted window 加权窗口

使用 win_type 可以指定加权窗口的类型。其中win_type 必须是scipy.signal 中的window类型。

举几个例子:

扩展窗口

扩展窗口会产生聚合统计信息的值,其中包含该时间点之前的所有可用数据。

指数加权窗口

指数加权窗口与扩展窗口相似,但每个先验点相对于当前点均按指数加权。

加权计算的公式是这样的:

$y_t=Σ^t_{i=0}{w_ix_{t-i}\over{Σ^t_{i=0}w_i}}$

其中$x_t$是输入,$y_t$是输出,$w_i$是权重。

EW有两种模式,一种模式是 adjust=True ,这种情况下 $𝑤_𝑖=(1−𝛼)^𝑖$

一种模式是 adjust=False ,这种情况下:

y0=x0nyt=(1a)yt1+axty_0=x_0\\n y_t=(1-a)y_{t-1}+ax_t

其中 0<𝛼≤1, 根据EM方式的不同a可以有不同的取值:

a={2s+1span模式其中s>=111+ccenterofmassc>=01explog0.5hhalflifeh>0a=\{ {{2\over {s+1}} \qquad span模式 其中s >= 1\\ {1\over{1+c}}\qquad center of mass c>=0 \\ 1-exp^{log0.5\over h} \qquad half-life h > 0 }

举个例子:

最后更新于

这有帮助吗?