pandas.Series.rolling#

Series.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=_NoDefault.no_default, closed=None, step=None, method='single')[源代码]#

提供滚动窗口计算。

Parameters:
windowint, timedelta, str, offset, or BaseIndexer subclass

移动窗口的大小.

如果为整数,则为每个窗口使用的固定观测次数.

如果为 timedelta、str 或 offset,则为每个窗口的时间段. 每个窗口的大小将根据时间段内包含的观测值而变化. 这仅对日期时间类索引有效. 要了解更多关于 offset 和频率字符串的信息,请查看 this link

如果为 BaseIndexer 子类,则窗口边界基于定义的 get_window_bounds 方法. 其他滚动关键字参数,即 min_periodscenterclosedstep 将传递给 get_window_bounds.

min_periodsint,默认 None

窗口中必须存在的最小观测值数量;否则,结果为 np.nan

对于由 offset 指定的窗口,min_periods 默认为 1.

对于由整数指定的窗口,min_periods 默认为窗口大小.

centerbool,默认 False

如果为 False,则将窗口标签设置为窗口右边缘.

如果为 True,则将窗口标签设置为窗口中心.

win_typestr,默认 None

如果为 None,则所有点都均匀加权.

如果为字符串,则必须是有效的 scipy.signal window function

某些 Scipy 窗口类型需要在聚合函数中传递其他参数. 其他参数必须与 Scipy 窗口类型方法签名中指定的关键字匹配.

onbool, default False

对于 DataFrame,在其中计算滚动窗口的列标签或索引级别,而不是 DataFrame 的索引.

由于未将整数索引用于计算滚动窗口,因此提供的整数列将被忽略并从结果中排除.

axisint 或 str,默认为 0

如果为 0'index',则在行上滚动。

如果为 1'columns',则在列上滚动。

对于 Series,此参数未使用,默认为 0。

自 2.1.0 版本弃用: axis 关键字已被弃用. 对于 axis=1,请先转置 DataFrame.

closedstr,默认 None

如果为 'right',则从计算中排除窗口中的第一个点.

如果为 'left',则从计算中排除窗口中的最后一个点.

如果为 'both',则不从计算中排除窗口中的任何点.

如果为 'neither',则从计算中排除窗口中的第一个和最后一个点.

默认为 None ('right').

stepint,默认 None

在 1.5.0 版本加入.

在每个 step 结果处评估窗口,相当于切片 [::step]. window 必须是整数. 使用非 None 或 1 的 step 参数会产生形状与输入不同的结果.

<strong>method</strong>str {‘single’, ‘table’},默认为 ‘single’

在 1.3.0 版本加入.

按单列或单行('single')执行滚动操作,或对整个对象('table')执行滚动操作。

此参数仅在方法调用中指定 engine='numba' 时实现。

Returns:
pandas.api.typing.Window or pandas.api.typing.Rolling

如果传递了 win_type,则返回 Window 实例. 否则,返回 Rolling 实例.

参见

expanding

提供扩展变换。

ewm

提供指数加权函数。

Notes

有关更多用法细节和示例,请参见 Windowing Operations

Examples

>>> 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

window

滚动总和,窗口长度为 2 个观测值.

>>> df.rolling(2).sum()
     B
0  NaN
1  1.0
2  3.0
3  NaN
4  NaN

滚动总和,窗口跨度为 2 秒.

>>> df_time = pd.DataFrame({'B': [0, 1, 2, np.nan, 4]},
...                        index=[pd.Timestamp('20130101 09:00:00'),
...                               pd.Timestamp('20130101 09:00:02'),
...                               pd.Timestamp('20130101 09:00:03'),
...                               pd.Timestamp('20130101 09:00:05'),
...                               pd.Timestamp('20130101 09:00:06')])
>>> df_time
                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:02  1.0
2013-01-01 09:00:03  2.0
2013-01-01 09:00:05  NaN
2013-01-01 09:00:06  4.0
>>> df_time.rolling('2s').sum()
                       B
2013-01-01 09:00:00  0.0
2013-01-01 09:00:02  1.0
2013-01-01 09:00:03  3.0
2013-01-01 09:00:05  NaN
2013-01-01 09:00:06  4.0

滚动总和,具有前瞻性窗口,包含 2 个观测值.

>>> indexer = pd.api.indexers.FixedForwardWindowIndexer(window_size=2)
>>> df.rolling(window=indexer, min_periods=1).sum()
     B
0  1.0
1  3.0
2  2.0
3  4.0
4  4.0

min_periods

滚动总和,窗口长度为 2 个观测值,但只需要最少 1 个观测值即可计算值.

>>> df.rolling(2, min_periods=1).sum()
     B
0  0.0
1  1.0
2  3.0
3  2.0
4  4.0

center

滚动总和,结果分配到窗口索引的中心.

>>> df.rolling(3, min_periods=1, center=True).sum()
     B
0  1.0
1  3.0
2  3.0
3  6.0
4  4.0
>>> df.rolling(3, min_periods=1, center=False).sum()
     B
0  0.0
1  1.0
2  3.0
3  3.0
4  6.0

step

滚动总和,窗口长度为 2 个观测值,最少 1 个观测值即可计算值,步长为 2.

>>> df.rolling(2, min_periods=1, step=2).sum()
     B
0  0.0
2  3.0
4  4.0

win_type

滚动总和,使用 Scipy 'gaussian' 窗口类型,窗口长度为 2. std 在聚合函数中是必需的.

>>> df.rolling(2, win_type='gaussian').sum(std=3)
          B
0       NaN
1  0.986207
2  2.958621
3       NaN
4       NaN

on

滚动总和,窗口长度为 2 天.

>>> df = pd.DataFrame({
...     'A': [pd.to_datetime('2020-01-01'),
...           pd.to_datetime('2020-01-01'),
...           pd.to_datetime('2020-01-02'),],
...     'B': [1, 2, 3], },
...     index=pd.date_range('2020', periods=3))
>>> df
                    A  B
2020-01-01 2020-01-01  1
2020-01-02 2020-01-01  2
2020-01-03 2020-01-02  3
>>> df.rolling('2D', on='A').sum()
                    A    B
2020-01-01 2020-01-01  1.0
2020-01-02 2020-01-01  3.0
2020-01-03 2020-01-02  6.0