1 窗口计算 略
2 窗口操作
s = pd.Series(range(1,7))
s.rolling(2).sum() #移动窗口
# df.rolling(
# window,#必传,如果为int,可以表示窗口的大小,如果是offset类型,表示时间数据中窗口按此时间偏移量设定大写
# min_periods: Optional[int] = ...,#每个窗口的最小数据,小于此窗口的输出值为NaN,offset情况下,默认为1.默认情况下,此值取窗口的大小
# center: _bool = ...,
# *,
# win_type: _str,#窗口的类型,默认为加权平均,支持非常丰富的函数窗口,如:boxcar、triang等,具体算法可参考Scipy的官方文档
# on: Optional[_str] = ...,#可选参数,对于df要作为窗口的列
# axis: SeriesAxisType = ...,#计算的轴方向
# closed: Optional[_str] = ...#窗口的开闭区间定义,支持right,left,both,neither.对于offset类型,默认是左开右闭,默认为right
# )
df = pd.DataFrame(np.random.randn(30,4),index=pd.date_range('10/1/2020',periods=30),columns=['A','B','C','D'])
df.rolling(2).mean() #每两天一个窗口求平均数
df.rolling('2D').mean() #每两天一个窗口求平均数,使用时间偏移,默认的最小观察数据为1,即第一天也是有数据的
# df.rolling('2D',c)['A'].mean() #代码未跑起来
df.A.rolling('2D').mean()#仅对A列进行窗口计算
df.rolling(2,win_type='hamming').sum() #使用窗口函数,汉明窗,对scipy库依赖
#支持的统计方法
# count() 非空计数
# sum() 值的总和
# mean()平均值
# median() 数值的算术中位数
# min()最小值
# max()最大值
# std()标准差
# var()无偏方差
# skew()样本偏斜度
# kurt()峰度样本
# quantile()样本分位数(百分位上的值)
# cov()无偏协方差(二进制)
# corr()关联(二进制)
#agg可以调用多个函数
df.rolling('2D').agg({'A':sum,'B':np.std}) #对窗口不同的列使用不同的计算方法
df.A.rolling('2D').agg({'A_sum':sum,'A_std':np.std}) #对同一列使用不同的函数
#apply()可以在窗口上自定义函数,要求应用此函数后产生一个单一值
df.A.rolling('2D').apply(lambda x:abs(sum(x)+1)) #对窗口求和再加1,最后求绝对值
#扩展窗口 s.expanding()只设最小可计算数量
s =pd.Series(range(1,7))
s.expanding(2).sum() #扩展窗口操作 与rolling(closed=left)相同