1、函数用处:
可以对series或者对dataframe进行窗口滚动计算
#官方文档参数
DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None,
axis=0, closed=None, method='single')
2、部分参数:
window:移动窗口的大小
min_periods:窗口中要求具有值的最小观察次数; 否则,result 为 np.nan。当前面window的类型为整数时,min_period 将默认为窗口的大小,即window的大小
center:
如果为 False,则将窗口标签设置为窗口索引的右边缘。
如果为 True,则将窗口标签设置为窗口索引的中心。
axis:
如果是0或‘ index’,则在行间滚动
如果是1或者‘ columns’,滚过这些列
closed:
='right',则计算中将排除滚动窗口中的第一个点。
='left',则滚动窗口中的最后一个点将被排除在计算之外。
='both',则滚动窗口中的无点将被排除在计算之外。
='neither',则滚动窗口中的第一点和最后一点将被排除在计算之外。
默认为'right'
3、BUG:window=n,当设置closed=“neither”时,按道理应该是对n-1的窗口大小进行相关运算,但是从下面测试结果来看,此时滚动的窗口大小为nan
df = pd.DataFrame(data = range(10))
df.rolling(5, closed='neither').apply(lambda x:len(x))
运行的结果如下
4、BUG解决办法
在GitHub上找到了pandas库的作者们给的回答
简而言之就是,当close='neither'时,min_periods不等于n-1(n为窗口大小),而是等于n,作为滚动计算的对象窗口里,却至多只剩n-1个值,达不到min_periods的最小窗口值 数(n)的要求,所以:
输出就都是nan了
解决办法就是:手动设置min_periods=n-1
补充:当close="left", "right", "both"时,min_periods 仍然等于n,但作为滚动计算的对象窗口里,分别至多剩 n/n/n+1 个值,可以有数据窗口达到min_periods的最小窗口值 数(n)的要求,有兴趣可以做个简单测试~
函数官方文档:pandas.DataFrame.rolling — pandas 1.4.2 documentation