说明
Pandas 中文教程修订中,欢迎加微信 sinbam 提供建议、纠错、催更。查看更新日志
.rolling()函数又叫移动窗口函数,此函数可以应用于一系列数据,指定参数window=n,并在其上调用适合的统计函数。
创建 Rolling 对象
创建 Rolling 对象后,可以对对象进行计算操作。
s = pd.Series(np.random.randn(1000),
index=pd.date_range('1/1/2000', periods=1000))
s = s.cumsum()
r = s.rolling(window=60)
r
# Rolling [window=60,center=False,axis=0]
我们可以看看 Rolling 支持的统计方法:
r. # noqa: E225, E999
r.agg r.apply r.count r.exclusions r.max r.median r.name r.skew r.sum
r.aggregate r.corr r.cov r.kurt r.mean r.min r.quantile r.std r.var
参数
在.rolling() 创建对象时,它支持以下参数:
参数
说明
window
可选参数,表示时间窗的大小,注意有两种形式(int 或 offset)。如果使用 int,则数值表示计算统计量的观测值的数量即向前几个数据,如果是offset类型,表示时间窗的大小。
min_periods
每个窗口最少包含的观测值数量,小于这个值的窗口结果为NaN,值可以是int,默认None,offset情况下,默认为1。
center
把窗口的标签设置为居中。布尔型,默认False,居右
win_type
窗口的类型,截取窗的各种函数,字符串类型,默认为None。
on
可选参数,对于dataframe而言,指定要计算滚动窗口的列,值为列名。
axis
int、字符串,默认为0,即对列进行计算
closed
定义区间的开闭,支持int类型的window。对于offset类型默认是左开右闭,默认为right,可以根据情况指定为left、both等。
窗口的类型 win_type
将win_type 传递给.rolling 会生成一个通用的滚动窗口计算,该计算将根据 win_type进行加权。
win_type 参数支持以下类型:
boxcar
triang
blackman
hamming
bartlett
parzen
bohman
blackmanharris
nuttall
barthann
kaiser (needs beta)
gaussian (needs std)
general_gaussian (needs power, width)
slepian (needs width)
exponential (needs tau).
如:
ser.rolling(window=5, win_type='triang').mean()
ser.rolling(window=5, win_type='gaussian').mean(std=0.1)
# 以下相同
ser.rolling(window=5, win_type='boxcar').mean()
ser.rolling(window=5).mean()
统计
我们可以使用上边的统计方法对窗口进行计算:
r.mean()
s.plot(style='k--') # 绘图看一下变化,原数据
r.mean().plot(style='k') # 绘图看一下变化,计算后的
DataFrame 的应用
它们也可以应用于DataFrame对象。 这实际上只是将移动窗口运算符应用于DataFrame 的所有列的语法糖:
df = pd.DataFrame(np.random.randn(1000, 4),
index=pd.date_range('1/1/2000', periods=1000),
columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
# 操作并绘图
df.rolling(window=60).sum().plot(subplots=True)
统计方法
提供许多常见的统计功能:
Method
Description
count()
Number of non-null observations
sum()
Sum of values
mean()
Mean of values
median()
Arithmetic median of values
min()
Minimum
max()
Maximum
std()
Bessel-corrected sample standard deviation
var()
Unbiased variance
skew()
Sample skewness (3rd moment)
kurt()
Sample kurtosis (4th moment)
quantile()
Sample quantile (value at %)
apply()
Generic apply
cov()
Unbiased covariance (binary)
corr()
Correlation (binary)
使用函数 apply()
apply() 函数接受一个额外的 func 参数,并执行通用滚动计算。 func 参数应该是一个从 ndarray 输入生成单个值的函数。 假设我们要滚动计算平均绝对偏差:
def mad(x):
return np.fabs(x - x.mean()).mean()
s.rolling(window=60).apply(mad, raw=True).plot(style='k')