J'ai un cadre de données comme celui-ci qui est importé d'un CSV.
stock pop
Date
2016-01-04 325.316 82
2016-01-11 320.036 83
2016-01-18 299.169 79
2016-01-25 296.579 84
2016-02-01 295.334 82
2016-02-08 309.777 81
2016-02-15 317.397 75
2016-02-22 328.005 80
2016-02-29 315.504 81
2016-03-07 328.802 81
2016-03-14 339.559 86
2016-03-21 352.160 82
2016-03-28 348.773 84
2016-04-04 346.482 83
2016-04-11 346.980 80
2016-04-18 357.140 75
2016-04-25 357.439 77
2016-05-02 356.443 78
2016-05-09 365.158 78
2016-05-16 352.160 72
2016-05-23 344.540 74
2016-05-30 354.998 81
2016-06-06 347.428 77
2016-06-13 341.053 78
2016-06-20 363.515 80
2016-06-27 349.669 80
2016-07-04 371.583 82
2016-07-11 358.335 81
2016-07-18 362.021 79
2016-07-25 368.844 77
... ... ...
Je voulais ajouter une nouvelle colonne MA qui calcule la moyenne de roulement pour la colonne pop. J'ai essayé ce qui suit
df['MA']=data.rolling(5,on='pop').mean()
Je reçois une erreur
ValueError: Wrong number of items passed 2, placement implies 1
Je me suis donc dit que j'allais essayer de voir si cela fonctionnait sans ajouter de colonne. J'ai utilisé
data.rolling(5,on='pop').mean()
J'ai obtenu le résultat suivant
stock pop
Date
2016-01-04 NaN 82
2016-01-11 NaN 83
2016-01-18 NaN 79
2016-01-25 NaN 84
2016-02-01 307.2868 82
2016-02-08 304.1790 81
2016-02-15 303.6512 75
2016-02-22 309.4184 80
2016-02-29 313.2034 81
2016-03-07 319.8970 81
2016-03-14 325.8534 86
2016-03-21 332.8060 82
2016-03-28 336.9596 84
2016-04-04 343.1552 83
2016-04-11 346.7908 80
2016-04-18 350.3070 75
2016-04-25 351.3628 77
2016-05-02 352.8968 78
2016-05-09 356.6320 78
2016-05-16 357.6680 72
2016-05-23 355.1480 74
2016-05-30 354.6598 81
2016-06-06 352.8568 77
2016-06-13 348.0358 78
2016-06-20 350.3068 80
2016-06-27 351.3326 80
2016-07-04 354.6496 82
2016-07-11 356.8310 81
2016-07-18 361.0246 79
2016-07-25 362.0904 77
... ... ...
Je n'arrive pas à appliquer la moyenne de Rolling sur la colonne pop. Qu'est-ce que je fais de mal ?
0 votes
Donne seulement ceci >>> data.rolling(5,on='pop') Rolling [window=5,center=False,axis=0,on=pop]
0 votes
Vous avez un saut de ligne entre les titres
date
ypop
ystock
. Quels sont les résultats delist(df)
?2 votes
Utilisez ce
data['pop'].rolling(5).mean()
...1 votes
@CMorris >>> list(data) ['stock', 'pop']
0 votes
@Anti21 Ok donc
Date
est votre indice. On dirait que vous avez réussi à le faire fonctionner - N'oubliez pas de voter et d'accepter toutes les réponses que vous avez trouvées utiles.0 votes
@AndrewL Ceci donne le résultat. Mais lorsque j'essaie d'utiliser data['MA"]=data['pop'].rolling(5).mean(), cela donne SyntaxError. La réponse de ac2001 a parfaitement fonctionné. Merci.
0 votes
Pouvez-vous fournir des détails sur l'erreur de syntaxe ? Ils font presque exactement la même chose, il peut donc y avoir une erreur de frappe.