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: float64rolling 对象可以通过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 ,这种情况下:
其中 0<𝛼≤1, 根据EM方式的不同a可以有不同的取值:
举个例子:
最后更新于
这有帮助吗?