Bonjour j'ai un tableau comme suit:
Date valeur somme
01/01/2019 10:10 1 1+2+3
01/01/2019 11:10 2 2+3
07/01/2019 11:10 3 3+4+5+6
08/01/2019 11:10 4 3+5+6+7
09/01/2019 11:10 5 NA
12/01/2019 11:10 6 NA
15/01/2019 11:10 7 NA
et je souhaiterai calculer les moyennes mobile (futur) sur 7 jours (donc en gros la colonne somme )
Je n'arrete pas de tourner autour des fonctions pandas comme ".rolling('7d').mean()" etc etc mais fait la chose dans le sens inverse : au lieu de prendre la période futur mais la période passé
j'ai bien croisé shift mais ça demande une fenêtre fixe
Bref comment feriez vous pour résoudre ce problème
comme le temps de chacun est précieux je vous mets un morceau de code pour obtenir le jeu de test de l'exemple
import pandas as pd
d = {'Date': ['01/01/2019 10:10','01/01/2019 11:10','07/01/2019 11:10','08/01/2019 11:10','09/01/2019 11:10','12/01/2019 11:10','15/01/2019 11:10'], 'Valeur': [1, 2,3,4,5,6,7]}
df = pd.DataFrame(data=d)
df.sort_values('Date',inplace=True)
df.reset_index(drop=True,inplace=True)
df.set_index('Date',inplace=True)
print(df);`
edit: en attendant la validation de mon message
j'ai écrit ceci ... ça fait le job
local_df= pd.DataFrame()
last_add=0
for index, row in df.iterrows():
print(index)
#on supprime les valeur inferieur a la date courante
local_df.drop(local_df.loc[(pd.to_datetime(local_df.index,dayfirst=True) < pd.to_datetime(index,dayfirst=True))].index, inplace=True)
#local_df=local_df.append(row)
print('last add:',last_add)
while ((last_add+1<=df.index.size) and ( pd.to_datetime(df.index[last_add],dayfirst=True) < pd.to_datetime(index,dayfirst=True )+ timedelta(7) )) :
local_df=local_df.append(df.loc[df.index[last_add]])
last_add+=1
print(local_df)
df.loc[index,'moy']=local_df.Valeur.mean()
df.loc[index,'median']=local_df.Valeur.median()
Mais avec un dataset de 20 000 lignes je m'aperçois que ce n'est pas la méthode la plus optimisée :
un test rapide ça mets 5 minutes à mouliner