2017-09-18 2 views
1

Ich habe einen Pandas-Datenrahmen, der Rohpulsdaten mit dem Index der Zeit (in Sekunden) hat.Finden Sie den Durchschnitt für benutzerdefinierte Fenster in Pandas

ich bin ich versucht, die Daten so, dass ich den Durchschnitt eines Benutzers definieren Fenster haben kann (zB 10s) - kein gleitender Durchschnitt, nur ein Durchschnitt von 10 s, dann sind die 10s folgen usw.

import pandas as pd 

hr_raw = pd.read_csv('hr_data.csv', index_col='time') 
print(hr_raw) 

     heart_rate 
time    
0.6  164.0 
1.0  182.0 
1.3  164.0 
1.6  150.0 
2.0  152.0 
2.4  141.0 
2.9  163.0 
3.2  141.0 
3.7  124.0 
4.2  116.0 
4.7  126.0 
5.1  116.0 
5.7  107.0 

Mit den obigen Beispieldaten möchte ich in der Lage sein, eine benutzerdefinierte Fenstergröße zu setzen (2 Sekunden) und einen neuen Datenrahmen mit einem Index von 2 Sek. Inkrementen zu erzeugen und die Herzrate zu mitteln, wenn die Zeit fällt in dieses Fenster (und sollte bis zum Ende des Datenrahmens fortfahren).

Zum Beispiel:

 heart_rate 
time    
2.0  162.40 
4.0  142.25 
6.0  116.25 

kann ich nur Methoden scheinen die Daten basierend auf einer vorbestimmten Anzahl von Behältern zu Bin zu finden (zum Beispiel eines Histogramms machen), und dies gibt nur die Zähl-/Frequenz.

danke.

Antwort

1

Ein groupby sollte es tun.

df.groupby((df.index // 2 + 1) * 2).mean() 

     heart_rate 
time    
2.0  165.00 
4.0  144.20 
6.0  116.25 

Beachten Sie, dass der Grund für den leichten Unterschied zwischen unseren Antworten ist, dass die obere Grenze ist ausgeschlossen. Das bedeutet, dass ein Messwert von 2,0 Sekunden für das Zeitintervall von 4,0 Sekunden berücksichtigt wird. Dies ist, wie es normalerweise getan wird, eine ähnliche Lösung mit dem TimeGrouper wird das gleiche Ergebnis liefern.

1

Wie coldspeed wies darauf hin, wird 2s in 4s in Betracht gezogen werden, aber wenn Sie es in 2x Eimer benötigen, können Sie

In [1038]: df.groupby(np.ceil(df.index/2)*2).mean() 
Out[1038]: 
     heart_rate 
time 
2.0  162.40 
4.0  142.25 
6.0  116.25 
Verwandte Themen