如果报错
首先,如果当前pandas版本直接使用rolling_mean报错:
AttributeError: module 'pandas' has no attribute 'rolling_mean'
如果报错,需要改成:
rolling(2).mean()
rolling()的参数
DataFrame.rolling(window, min_periods=None, center=False, win_type=None,
on=None, axis=0, closed=None)
window: 'int | timedelta | BaseOffset | BaseIndexer' 移动窗口的大小。 -使用数值int,则表示观测值的数量,即向前几个数据。 -如果为offset,那么是窗口的时间段。每个窗口的大小都将根据时间段中包含的观察结果而变化。这仅对类似日期时间的索引有效。 -如果传递了 BaseIndexer 子类,则根据定义的get_window_bounds方法计算窗口边界。其他rolling关键字参数,即min_periods、center和 closed将传递给get_window_bounds。 min_periods: 'int | None' = None 值可以是int,默认None。每个窗口最少包含的观测值数量,小于这个值的窗口结果为NA。 center: 'bool_t' = False 布尔型,默认False,窗口标签居右。参数为True时,窗口的标签设置为居中。 win_type: 'str | None' = None 窗口的类型。截取窗的各种函数。字符串类型,默认为None,此时窗口内数据计算时平均加权。 win_type支持的函数名称详见:Window functions (scipy.signal.windows) on: 'str | None' = None 可选参数。对于dataframe而言,指定要计算滚动窗口的列。值为列名。 axis: 'Axis' = 0 默认为0,即对列进行计算;axis为1,对行进行计算。 closed: 'str | None' = None 定义区间的开闭,支持int类型的window。 默认为right,即左开右闭区间,也可以指定为left、both、neither。 method: 'str' = 'single' 参数为'single'或者'table',默认为'single'。 'single'时对每个列或行执行滚动操作。 'table'时覆盖整个对象。
官方例码:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rolling.html?highlight=rolling#pandas.DataFrame.rolling
https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.rolling.html?highlight=rolling#pandas.DataFrame.rolling
df = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]})
df
B
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
'triang' 窗口类型:scipy.signal.windows.triang — SciPy v1.7.1 Manual
df.rolling(2, win_type='triang').sum()
B
0 NaN
1 0.5
2 1.5
3 NaN
4 NaN
如图所示,"triang"根据中间高,两边低的权重计算结果。具体权重分配可以参考该博主,写的很清楚。DataFrame加权滑窗rolling使用,win_type=‘triang‘详解_chenhepg的博客-CSDN博客_dataframe rolling@创建于:20210312@修改于:20210312文章目录1、背景2、rolling介绍2.1 DataFrame rolling API介绍2.2 参数介绍3、例子3.1 window例子3.2 win_type=‘triang’例子4、参考链接1、背景2、rolling介绍2.1 DataFrame rolling API介绍此处对应的pandas 版本号是 1.2.2,pandas.DataFrame.rollingDataFrame.rolling(window, min_periohttps://blog.csdn.net/chenhepg/article/details/114694133
理解min_periods
df
B
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
df.rolling(2).sum()
B
0 NaN
1 1.0
2 3.0
3 NaN
4 NaN
df.rolling(2,min_periods=1).sum()
B
0 0.0
1 1.0
2 3.0
3 2.0
4 4.0
相当于在长度为2的框内,只要框内有一个值不为就可以计算数值,NaN自动认为是0。
min_periods=1时,对于第0行,虽然框的一部分在df之外,框外的内容也是NaN,但是满足框内有一个数值的条件,和为0。第3行(行号)也是如此。
min_periods=2时,也就是默认情况,对于第0行,框的一部分在df之外,框外的内容也是NaN,不满足框内有两个数值的条件,和为NaN。第3行(行号)也是如此。
min_periods=3时,会报错ValueError: min_periods 3 must be <= window 2,min_periods参数值不可以比window还大。