Как рассчитать скользящее среднее в Pandas

Как рассчитать скользящее среднее в Pandas

Скользящее среднее — это просто среднее значение определенного количества предыдущих периодов временного ряда.

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

df['column_name']. rolling ( rolling_window ).mean()

В этом руководстве представлено несколько примеров использования этой функции на практике.

Пример: вычислить скользящее среднее в Pandas

Предположим, у нас есть следующие Pandas DataFrame:

import numpy as np
import pandas as pd

#make this example reproducible
np.random.seed (0)

#create dataset
period = np.arange (1, 101, 1)
leads = np.random.uniform (1, 20, 100)
sales = 60 + 2\*period + np.random.normal (loc=0, scale=.5\*period, size=100)
df = pd.DataFrame({'period ': period, 'leads ': leads, 'sales ': sales})

#view first 10 rows
df.head (10)

 period leads sales
0 1 11.427457 61.417425
1 2 14.588598 64.900826
2 3 12.452504 66.698494
3 4 11.352780 64.927513
4 5 9.049441 73.720630
5 6 13.271988 77.687668
6 7 9.314157 78.125728
7 8 17.943687 75.280301
8 9 19.309592 73.181613
9 10 8.285389 85.272259

Мы можем использовать следующий синтаксис для создания нового столбца, содержащего скользящее среднее «продаж» за предыдущие 5 периодов:

#find rolling mean of previous 5 sales periods
df['rolling_sales_5'] = df['sales']. rolling (5).mean()

#view first 10 rows
df.head (10)

 period leads sales rolling_sales_5
0 1 11.427457 61.417425 NaN
1 2 14.588598 64.900826 NaN
2 3 12.452504 66.698494 NaN
3 4 11.352780 64.927513 NaN
4 5 9.049441 73.720630 66.332978
5 6 13.271988 77.687668 69.587026
6 7 9.314157 78.125728 72.232007
7 8 17.943687 75.280301 73.948368
8 9 19.309592 73.181613 75.599188
9 10 8.285389 85.272259 77.909514

Мы можем вручную проверить, что скользящее среднее значение продаж, отображаемое для периода 5, является средним значением предыдущих 5 периодов:

Скользящее среднее в период 5: (61,417+64,900+66,698+64,927+73,720)/5 = 66,33

Мы можем использовать аналогичный синтаксис для вычисления скользящего среднего значения нескольких столбцов:

#find rolling mean of previous 5 leads periods 
df['rolling_leads_5'] = df['leads']. rolling (5).mean() 

#find rolling mean of previous 5 leads periods
df['rolling_sales_5'] = df['sales']. rolling (5).mean()

#view first 10 rows
df.head (10)

 period leads sales rolling_sales_5 rolling_leads_5
0 1 11.427457 61.417425 NaN NaN
1 2 14.588598 64.900826 NaN NaN
2 3 12.452504 66.698494 NaN NaN
3 4 11.352780 64.927513 NaN NaN
4 5 9.049441 73.720630 66.332978 11.774156
5 6 13.271988 77.687668 69.587026 12.143062
6 7 9.314157 78.125728 72.232007 11.088174
7 8 17.943687 75.280301 73.948368 12.186411
8 9 19.309592 73.181613 75.599188 13.777773
9 10 8.285389 85.272259 77.909514 13.624963

Мы также можем создать быстрый линейный график, используя Matplotlib, чтобы визуализировать необработанные продажи по сравнению со скользящим средним значением продаж:

import matplotlib.pyplot as plt
plt.plot(df['rolling_sales_5'], label='Rolling Mean')
plt.plot(df['sales'], label='Raw Data')
plt.legend()
plt.ylabel('Sales')
plt.xlabel('Period')
plt.show()
Среднее значение графика в pandas в Python

Синяя линия отображает скользящее среднее продаж за 5 периодов, а оранжевая линия отображает необработанные данные о продажах.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Как рассчитать скользящую корреляцию в Pandas
Как рассчитать среднее значение столбцов в Pandas

Замечательно! Вы успешно подписались.
Добро пожаловать обратно! Вы успешно вошли
Вы успешно подписались на кодкамп.
Срок действия вашей ссылки истек.
Ура! Проверьте свою электронную почту на наличие волшебной ссылки для входа.
Успех! Ваша платежная информация обновлена.
Ваша платежная информация не была обновлена.