J'ai une trame de données contenant des séries temporelles pour 100 objets:
object period value
1 1 24
1 2 67
...
1 1000 56
2 1 59
2 2 46
...
2 1000 64
3 1 54
...
100 1 451
100 2 153
...
100 1000 21
Je veux calculer la moyenne mobile avec la fenêtre 10 pour la colonne value
. Je suppose que je dois faire quelque chose comme
df.groupby('object').apply(lambda ~calculate MA~)
puis fusionner cette série à la trame de données d'origine par objet? Impossible de comprendre les commandes exactes
Vous pouvez utiliser roulement avec transform
:
df['moving'] = df.groupby('object')['value'].transform(lambda x: x.rolling(10, 1).mean())
Le 1
dans rolling
correspond au nombre minimum de périodes.
Vous pouvez utiliser rolling
sur groupby
directement comme:
df['moving'] = df.groupby('object').rolling(10)['value'].mean()
Créez une colonne comme méthode de chaîne:
(
df
.assign(
column_name = lambda x:
x
.groupby(['object'])['value']
.transform(lambda x: x.rolling(10)
.mean())
)
)