2015-01-26 15 views
5

ziemlich grundlegende Frage, aber frage mich:Python, Pandas: Durchschnitt alle zwei Reihen zusammen

Was ist die ‚richtige‘ Art und Weise alle 2 Reihen zusammen in Pandas Datenrahmen mitteln, und somit nur mit der Hälfte der Zahl am Ende von Reihen?

Beachten Sie, dass dies anders ist als rolling_mean, da die Anzahl der Einträge reduziert wird.

Antwort

4

Ein schneller Weg, es zu tun:

>>> s = pd.Series(range(10)) 
>>> s 
0 0 
1 1 
2 2 
3 3 
4 4 
5 5 
6 6 
7 7 
8 8 
9 9 
>>> ((s + s.shift(-1))/2)[::2] 
0 0.5 
2 2.5 
4 4.5 
6 6.5 
8 8.5 

Die „richtige Weg“ Ich denke, wie etwas wäre:

>> a = s.index.values 
>>> idx = np.array([a, a]).T.flatten()[:len(a)] 
>>> idx 
[0 0 1 1 2 2 3 3 4 4] 
>>> s.groupby(idx).mean() 
0 0.5 
2 2.5 
4 4.5 
6 6.5 
8 8.5 

Aber es ist ~ 2x langsamer und wird noch schlimmer mit zunehmender Größe.

+0

nett, danke, ich mag den schnellen Weg. es verallgemeinert schön zu mehrfachen Zeilen Mittelwertbildung – AimForClarity

+0

Ihre "richtige" Weise, oder Versionen davon, die eine Liste verwenden, wird notwendig, wenn man über '' n''' Reihen gemittelt oder summiert, es sei denn, es gibt einen besseren Weg, eine willkürliche Änderung '' zu behandeln 'n''' – SpmP

Verwandte Themen