pandas.Series.rolling#

Series.скользящее(window, min_periods=None, center=False, win_type=None, on=None, axis=, closed=None, step=None, method='single')[источник]#

Предоставляет скользящие оконные вычисления.

Параметры:
windowint, timedelta, str, offset или подкласс BaseIndexer

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

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

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

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

min_periodsint, по умолчанию None

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

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

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

центрbool, по умолчанию False

Если False, установите метки окна как правый край индекса окна.

Если True, установить метки окна как центр индекса окна.

win_typestr, по умолчанию None

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

Если строка, она должна быть допустимой оконная функция scipy.signal.

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

наstr, optional

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

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

осьint или str, по умолчанию 0

Если 0 или 'index', прокатка по строкам.

Если 1 или 'columns', прокатка по столбцам.

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

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

закрытstr, по умолчанию None

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

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

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

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

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

шагint, по умолчанию None

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

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

методstr {'single', 'table'}, по умолчанию 'single'

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

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

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

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

Экземпляр Window возвращается, если win_type передано. В противном случае возвращается экземпляр 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

центр

Скользящая сумма с результатом, присвоенным центру индекса окна.

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

шаг

Скользящая сумма с длиной окна в 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

на

Скользящая сумма с длиной окна 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