Ich habe folgenden Datenrahmen:Berechne den Mittelwert der n-ten Anzahl der Elemente in der Spalte in pandas
df1
index year week a b c
-10 2017 10 45 26 19
-9 2017 11 37 23 14
-8 2017 12 21 66 19
-7 2017 13 47 36 92
-6 2017 14 82 65 18
-5 2017 15 68 68 19
-4 2017 16 30 95 24
-3 2017 17 21 15 94
-2 2017 18 67 30 16
-1 2017 19 10 13 13
0 2017 20 26 22 18
1 2017 21 NaN NaN NaN
2 2017 22 NaN NaN NaN
3 2017 23 NaN NaN NaN
4 2017 24 NaN NaN NaN
...
53 2018 20 NaN NaN NaN
I für jede leere Zelle benötigen den Mittelwert der n-ten vorherigen Werte in einer Spalte zu berechnen und schreibe diesen Wert in eine Zelle. n
ist gleich der Anzahl der Indizes von Null und höher. Zum Beispiel muss ich für die erste leere Zelle in der Spalte a
den Durchschnitt zwischen den Indizes 0
und -10
berechnen. Dann für die nächste Zelle zwischen 1
und und so weiter. Dies gilt auch für die Spalten a
, b
und c
. Und Berechnungen beginnen immer dort, wo die index = 1
.
Und das Problem ist, dass die Anzahl der Spalten wie a
, b
, c
kann unterschiedlich sein. Aber ich weiß, dass diese Spalten immer nach der Spalte week
sind. Ist es möglich, diese Berechnungen auf eine unbestimmte Anzahl von Spalten anzuwenden, aber wenn es bekannt ist, dass diese Spalten nach der Spalte week
liegen?
Ich habe mich bemüht, etwas zu finden, aber ich konnte nichts passendes finden.
UPD: Wenn das hilft, wird die maximale Anzahl von Zeilen von index = 0
und unten 53
sein.
Wenn Sie sagen, „dann für die nächste Zelle zwischen '1' und' -9' und so weiter“, bedeutet es, a) berechnen den Mittelwert zwischen' -9 'und' 0' und ignoriere 'NaN' in '1' oder b) berechne den Mittelwert zwischen' -9' und '1' unter Verwendung des neuen Wertes, der für' 1' in der vorherigen "Iteration" berechnet wurde? – jdehesa
@jdehesa, ja, ich muss auch einen neuen Wert in der Zelle '1' verwenden, wie Sie in b) beschrieben haben. –
Sie können tatsächlich loc mit Slicing-Operatoren verwenden und dann ablassen, um nur die Spalten a, b, c zu erhalten (df1.loc [:, 'week':]. Drop ('week', axis = 1). Ich denke, theres no pandas Lösung (es sei denn, ein Pandas Zauberer kommt mit einem), um den gleitenden Durchschnittsgedanken zu machen (da du den vorherigen berechneten Durchschnitt mittelst) und du musst wahrscheinlich eine Pythonschleife verwenden. Wenn die Leistung kritisch ist, könntest du einen Blick darauf werfen Cython oder Numba, um die Schleife zu beschleunigen. –