Python Pandas Роллинг функции

Я не уверен, что понимаю параметр min_periodsв rollingфункциях Pandas : почему он должен быть меньше, чем windowпараметр?
Я хотел бы вычислить (например) rolling max минус rolling min с окном из десяти значений, но я хочу подождать, возможно, 20 значений, прежде чем начать вычисления:

In[1]:  import pandas as pd
In[2]:  import numpy as np
In[3]:  df = pd.DataFrame(columns=['A','B'], data=np.random.randint(low=0,high=100,size=(100,2)))
In[4]:  roll = df['A'].rolling(window=10, min_periods=20)
In[5]:  df['C'] = roll.max() - roll.min()

In[6]:  roll
Out[6]: Rolling [window=10,min_periods=20,center=False,axis=0]

In[7]:  df['C'] = roll.max()-roll.min()

Я получаю следующую ошибку:

ValueError: Invalid min_periods size 20 greater than window 10

Я думал, что min_periodsэто было там, чтобы сказать, сколько значений функция должна была ждать, прежде чем начать вычисления. В документации говорится:

min_periods : int, по умолчанию нет

Минимальное количество наблюдений в окне, необходимое для получения значения
(в противном случае результат NA)

Я не был внимателен к деталям «в окне» здесь…
Тогда каков был бы наиболее эффективный способ достичь того, чего я пытаюсь достичь? Должен ли я сделать что-то вроде:

roll = df.loc[20:,'A'].rolling(window=10)
df['C'] = roll.max() - roll.min()

Есть ли более эффективный способ?

2 ответа

  1. Аргумент min period-это просто способ применить функцию к меньшей выборке, чем окно прокрутки. Итак, допустим, вы хотите, чтобы скользящий минимум окна 10, минуя аргумент min period 5, позволил бы вычислить min первых 5 данных, затем первых 6, затем 7,8,9 и, наконец, 10. Теперь, когда панды могут начать сворачивать свои окна 10 точек данных, потому что у него есть больше, чем 10 точек данных, он будет держать окно периода 10.

  2. этот min_period = nпараметр просто означает, что для вычисления скользящей статистики требуются по крайней мере nдостоверные наблюдения.

    Пример, предположим min_period = 5и у вас есть rolling meanза последние 10наблюдения. Теперь, что произойдет, если 6из последних 10наблюдений действительно отсутствуют значения? Затем, учитывая, что 4<5(действительно, здесь есть только 4 непустых значения, и вам требуется по крайней мере 5 непустых наблюдений), скользящее среднее также будет отсутствовать.

    Это очень, очень важный вариант.

    Из документации

    min_periods : int, по умолчанию нет минимальное количество наблюдений в
    окно обязательно должно иметь значение (в противном случае результат NA).