Вы можете использовать следующий базовый синтаксис для вычисления скользящего среднего по группе в 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