J'ai un tableau croisé dynamique pandas qui était précédemment décalé et qui ressemble maintenant à ceci :
pivot
A B C D E
0 5.3 5.1 3.5 4.2 4.5
1 5.3 4.1 3.5 4.2 NaN
2 4.3 4.1 3.5 NaN NaN
3 4.3 4.1 NaN NaN NaN
4 4.3 NaN NaN NaN NaN
J'essaie de calculer une moyenne mobile avec une fenêtre variable (dans ce cas, 3 et 4 périodes) sur la diagonale inverse en itérant sur chaque colonne et en essayant de stocker cette valeur dans un nouveau cadre de données, qui ressemblerait à ceci :
expected_df with a 3 periods window
A B C D E
0 4.3 4.1 3.5 4.2 4.5
expected_df with a 4 periods window
A B C D E
0 4.5 4.3 3.5 4.2 4.5
Jusqu'à présent, j'ai essayé de sous-titrer le tableau croisé dynamique d'origine et de créer un cadre de données différent qui ne contient que les valeurs de la fenêtre spécifiée pour chaque colonne, pour ensuite calculer la moyenne, comme ceci :
subset
A B C D E
0 4.3 4.1 3.5 4.2 4.5
1 4.3 4.1 3.5 4.2 NaN
2 4.3 4.1 3.5 NaN NaN
Pour cela, j'ai essayé de construire la boucle for suivante :
df2 = pd.DataFrame()
size = pivot.shape[0]
window = 3
for i in range(size):
df2[i] = pivot.iloc[size-window-i:size-i,i]
Ce qui ne fonctionne pas même lorsque cette pivot.iloc[size-window-i:size-i,i]
renvoie bien les valeurs dont j'ai besoin lorsque je passe manuellement les index, mais dans la boucle for, il manque la première valeur de la deuxième colonne et ainsi de suite :
df2
A B C D E
0 4.3 NaN NaN NaN NaN
1 4.3 4.1 NaN NaN NaN
2 4.3 4.1 3.5 NaN NaN
Est-ce que quelqu'un a une bonne idée sur la façon de calculer la moyenne mobile ou sur la façon de corriger la partie de la boucle for ? Merci d'avance pour vos commentaires.