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_periods、center、closed和step将传递给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 实例.
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