Spec-Zone.ru › pandas 2

pandas.Series.rolling

Series.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=<no_default>, closed=None, step=None, method='single')[исходный код]

Выполняет вычисления с использованием скользящего окна.

Параметры:
window:int, timedelta, str, offset, or BaseIndexer subclass

Размер скользящего окна.

Если задано целое число, то оно определяет фиксированное количество наблюдений, используемых для каждого окна.

Если задано значение timedelta, строка или смещение, то оно определяет временной интервал для каждого окна. Размер окна будет переменным и будет зависеть от наблюдений, попавших в этот временной интервал. Это допустимо только для индексов с типом даты и времени. Подробнее о смещениях и строках частоты см. по этой ссылке.

Если задан подкласс BaseIndexer, границы окна определяются методом get_window_bounds. Дополнительные ключевые аргументы для скользящего окна, а именно min_periods, center, closed и step, будут переданы в get_window_bounds.

min_periods:int, default None

Минимальное количество наблюдений в окне, необходимое для получения значения; в противном случае результатом будет np.nan.

Для окна, заданного смещением, по умолчанию min_periods равно 1.

Для окна, заданного целым числом, по умолчанию min_periods равно размеру окна.

center:bool, default False

Если False, метки окна располагаются на правой границе индекса окна.

Если True, метки окна располагаются в центре индекса окна.

win_type:str, default None

Если задано None, все точки имеют одинаковый вес.

Если задана строка, она должна обозначать допустимую оконную функцию scipy.signal.

Для некоторых типов окон Scipy необходимо передавать дополнительные параметры в функцию агрегации. Дополнительные параметры должны соответствовать ключевым словам, указанным в сигнатуре метода типа окна Scipy.

on:str, optional

Для DataFrame — метка столбца или уровень Index, по которому вычисляется скользящее окно вместо индекса DataFrame.

Указанный целочисленный столбец игнорируется и исключается из результата, поскольку целочисленный индекс не используется для вычисления скользящего окна.

axis:int or str, default 0

Если задано 0 или 'index', скользящее окно применяется вдоль строк.

Если задано 1 или 'columns', скользящее окно применяется вдоль столбцов.

Для Series этот параметр не используется и по умолчанию равен 0.

Устарело с версии 2.1.0: Ключевое слово axis устарело. Для axis=1 вместо этого сначала транспонируйте DataFrame.

closed:str, default None

Если задано 'right', первая точка в окне исключается из вычислений.

Если задано 'left', последняя точка в окне исключается из вычислений.

Если задано 'both', ни одна точка в окне не исключается из вычислений.

Если задано 'neither', первая и последняя точки в окне исключаются из вычислений.

По умолчанию None ('right').

step:int, default None

Добавлено в версии 1.5.0.

Вычисляет окно для каждого step результата, что эквивалентно срезу [::step]. window должно быть целым числом. Использование аргумента step, отличного от None или 1, приводит к тому, что форма результата отличается от формы входных данных.

method:str {‘single’, ‘table’}, default ‘single’

Добавлено в версии 1.3.0.

Выполняет операцию скользящего окна отдельно для каждого столбца или строки ('single') либо для всего объекта ('table').

Этот аргумент реализован только при указании engine='numba' в вызове метода.

Возвращает:
pandas.api.typing.Window or pandas.api.typing.Rolling

Если передано win_type, возвращается экземпляр Window. В противном случае возвращается экземпляр Rolling.

См. также

expanding

Предоставляет преобразования с расширяющимся окном.

ewm

Предоставляет функции экспоненциального взвешивания.

Примечания

Дополнительные сведения об использовании и примеры см. в разделе Операции с окнами.

Примеры

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

Скользящая сумма для окна длиной 2 с использованием типа окна Scipy 'gaussian'. В функции агрегации требуется 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

© 2008–2011, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
© 2011–2025, Open source contributors
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/2.3.0/reference/api/pandas.Series.rolling.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API