Добро пожаловать в SO: Надеюсь, люди скоро запомнят вас из предыдущих сообщений SO, таких как этот.
Из вашего примера кажется, что @Allen дал вам код, который дает ответ в вашей таблице. Тем не менее, это не совсем то же самое, что "скользящий" способ. Функция expanding()
, которую использует Аллен, берет среднее значение первой строки, деленное на n (которое равно 1), затем добавляет строки 1 и 2 и делит на n (которое теперь равно 2), и так далее, так что последняя строка is (4 + 6 + 10 + 12) / 4 = 8.
Это последнее число может быть ответом, если окно, которое вы хотите для скользящего среднего, равно 4, поскольку это будет означать, что вы хотите среднее значение 4 наблюдения. Однако, если вы продолжите движение вперед с размером окна 4 и начнете включать строки 5, 6, 7 ..., тогда ответ из expanding()
может отличаться от того, что вы хотите. Фактически, expanding()
записывает среднее значение всей серии (в данном случае price
), как будто оно получает новый фрагмент данных в каждой строке. «Свертывание», с другой стороны, дает результат агрегации некоторого размера окна.
Вот еще один вариант выполнения скользящих вычислений: метод rolling()
в pandas.dataframe
.
В вашем случае вы должны сделать:
df['rolling_mean'] = df.price.rolling(4).mean()
df
index price rolling_mean
0 4 nan
1 6 nan
2 10 nan
3 12 8.000000
Эти nan
s являются результатом работы с окнами: пока не будет достаточно строк для вычисления среднего, результат будет nan
. Вы можете установить меньшее окно:
df['rolling_mean'] = df.price.rolling(2).mean()
df
index price rolling_mean
0 4 nan
1 6 5.000000
2 10 8.000000
3 12 11.00000
. Это показывает уменьшение количества записей nan
, а также функцию прокрутки: оно только усредняется в предоставленном вами окне второго размера. В результате значение df['rolling_mean']
будет отличаться от значения df.price.expanding()
.
Примечание: вы можете избавиться от nan
, используя .rolling(2, min_periods = 1)
, который сообщает функции минимальное количество определенных значений в пределах окно, которое должно присутствовать для расчета результата.