Pandas: как рассчитать скользящую среднюю по группе


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

#calculate 3-period moving average of 'values' by 'group'
df.groupby('group')['values']. transform ( lambda x: x. rolling (3, 1).mean())

В следующем примере показано, как использовать этот синтаксис на практике.

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

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

import pandas as pd

#create DataFrame
df = pd.DataFrame({'store': ['A', 'A', 'A', 'A', 'A', 'B', 'B', 'B', 'B', 'B'],
 'period': [1, 2, 3, 4, 5, 1, 2, 3, 4, 5],
 'sales': [7, 7, 9, 13, 14, 13, 13, 19, 20, 26]})

#view DataFrame
df

 store period sales
0 A 1 7
1 A 2 7
2 A 3 9
3 A 4 13
4 A 5 14
5 B 1 13
6 B 2 13
7 B 3 19
8 B 4 20
9 B 5 26

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

#calculate 3-day moving average of sales by store
df['ma'] = df.groupby('store')['sales']. transform ( lambda x: x. rolling (3, 1).mean())

#view updated DataFrame
df

 store period sales ma
0 A 1 7 7.000000
1 A 2 7 7.000000
2 A 3 9 7.666667
3 A 4 13 9.666667
4 A 5 14 12.000000
5 B 1 13 13.000000
6 B 2 13 13.000000
7 B 3 19 15.000000
8 B 4 20 17.333333
9 B 5 26 21.666667

Примечание : x.rolling(3, 1) означает вычисление 3 -периодной скользящей средней и требует 1 в качестве минимального количества периодов.

Столбец "ma" показывает трехдневное скользящее среднее продаж для каждого магазина.

Чтобы рассчитать другую скользящую среднюю, просто измените значение в функции roll() .

Например, вместо этого мы могли бы рассчитать 2-дневную скользящую среднюю продаж для каждого магазина:

#calculate 2-day moving average of sales by store
df['ma'] = df.groupby('store')['sales']. transform ( lambda x: x. rolling (2, 1).mean())

#view updated DataFrame
df

 store period sales ma
0 A 1 7 7.0
1 A 2 7 7.0
2 A 3 9 8.0
3 A 4 13 11.0
4 A 5 14 13.5
5 B 1 13 13.0
6 B 2 13 13.0
7 B 3 19 16.0
8 B 4 20 19.5
9 B 5 26 23.0

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

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

Как выполнить GroupBy Sum в Pandas
Как подсчитать уникальные значения с помощью GroupBy в Pandas
Как использовать Groupby и Plot в Pandas

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