Допустим, у меня есть датафрейм, как показано ниже
import pandas as pd
data = {'team': ['team1','team1','team1','team1','team1','team1','team1','team1','team1','team1','team1','team1','team1','team1',
'team2','team2','team2','team2','team2','team2','team2','team2','team2','team2','team2','team2','team2','team2',],
'score': [1,2,3,4,5,6,7,8,9,10,11,12,13,14,1,2,3,4,5,6,7,8,9,10,11,12,13,14],
'yards': [10,20,30,40,50,60,70,80,90,100,110,120,130,140,10,20,30,40,50,60,70,80,90,100,110,120,130,140]}
df = pd.DataFrame.from_dict(data)
Я пытаюсь вычислить ewm, используя этот ручной метод, описанный в этом посте, ( Панды вычисляют ewm неправильно? ),для столбцов «оценка» и «ярды», но я замечаю, что мой диапазон не работает, как предназначено для каждой сгруппированной команды.Это то, что у меня есть для моего кода до сих пор
ema_features = df[['team']].copy()
for feature_name in df[['score','yards']]:
span=10
feature_ema = (df.groupby('team')[feature_name].rolling(window=span, min_periods=span).mean()[:span])
rest = df[feature_name][span:]
x = pd.concat([feature_ema, rest]).ewm(span=span, adjust=False).mean()
ema_features[feature_name] = x
, результат этого выглядит следующим образом
ema_features
team score yards
0 team1 NaN NaN
1 team1 NaN NaN
2 team1 NaN NaN
3 team1 NaN NaN
4 team1 NaN NaN
5 team1 NaN NaN
6 team1 NaN NaN
7 team1 NaN NaN
8 team1 NaN NaN
9 team1 NaN NaN
10 team1 6.500000 65.000000
11 team1 7.500000 75.000000
12 team1 8.500000 85.000000
13 team1 9.500000 95.000000
14 team2 7.954545 79.545455
15 team2 6.871901 68.719008
16 team2 6.167919 61.679189
17 team2 5.773752 57.737518
18 team2 5.633070 56.330696
19 team2 5.699784 56.997843
20 team2 5.936187 59.361871
21 team2 6.311426 63.114258
22 team2 6.800257 68.002575
23 team2 7.382029 73.820289
24 team2 8.039842 80.398418
25 team2 8.759871 87.598706
26 team2 9.530803 95.308032
27 team2 10.343384 103.433844
Мой вопрос заключается в том, как мне применить мой диапазон к команде 2, какЧто ж?Вместо вышеприведенного вывода, где ewm команды 2 рассчитывается с командой 1. Я хотел бы, чтобы ewm каждой команды рассчитывался индивидуально друг от друга, что требует применения правильного диапазона и затем расчета, как я и ожидаю ниже.
ema_features
team score yards
0 team1 NaN NaN
1 team1 NaN NaN
2 team1 NaN NaN
3 team1 NaN NaN
4 team1 NaN NaN
5 team1 NaN NaN
6 team1 NaN NaN
7 team1 NaN NaN
8 team1 NaN NaN
9 team1 NaN NaN
10 team1 6.500000 65.000000
11 team1 7.500000 75.000000
12 team1 8.500000 85.000000
13 team1 9.500000 95.000000
14 team2 NaN NaN
15 team2 NaN NaN
16 team2 NaN NaN
17 team2 NaN NaN
18 team2 NaN NaN
19 team2 NaN NaN
20 team2 NaN NaN
21 team2 NaN NaN
22 team2 NaN NaN
23 team2 6.500000 65.000000
24 team2 7.500000 75.000000
25 team2 8.500000 85.000000
26 team2 9.500000 95.000000