2016-08-17 10 views
1

Ich bin in Form eines DataFrame eine Zeitreihe mit, dass ich groupby zu einer ReiheBinning Zeitreihe mit Pandas

pan.groupby(pan.Time).mean() 

, die nur zwei Spalten Time und Value:

Time    Value 
2015-04-24 06:38:49 0.023844 
2015-04-24 06:39:19 0.019075 
2015-04-24 06:43:49 0.023844 
2015-04-24 06:44:18 0.019075 
2015-04-24 06:44:48 0.023844 
2015-04-24 06:45:18 0.019075 
2015-04-24 06:47:48 0.023844 
2015-04-24 06:48:18 0.019075 
2015-04-24 06:50:48 0.023844 
2015-04-24 06:51:18 0.019075 
2015-04-24 06:51:48 0.023844 
2015-04-24 06:52:18 0.019075 
2015-04-24 06:52:48 0.023844 
2015-04-24 06:53:48 0.019075 
2015-04-24 06:55:18 0.023844 
2015-04-24 07:00:47 0.019075 
2015-04-24 07:01:17 0.023844 
2015-04-24 07:01:47 0.019075 

Ich versuche herauszufinden, wie ich diese Werte in eine Abtastrate von z 30 Sekunden und mittle diese Fächer mit mehr als einer Beobachtung.

In einem letzten Schritt müsste ich diese Werte interpolieren, aber ich bin mir sicher, dass da draußen etwas ist, das ich benutzen kann.

Allerdings kann ich einfach nicht herausfinden, wie das Binning und Mittelung dieser Werte zu tun. Time ist ein datetime.datetime Objekt, kein str.

Ich habe verschiedene Dinge ausprobiert, aber nichts funktioniert. Ausnahmen, die herumfliegen.

Jemand da draußen, wer hat das?

+1

http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling –

Antwort

1

IIUC, könnten Sie TimeGrouper zusammen mit groupby auf der Indexebene verwenden, um die Mittelwerte für die Value Spalte zu berechnen, wie gezeigt:

df.set_index('Time', inplace=True) 
# Taking mean values for a frequency of 2 minutes 
df_group = df.groupby(pd.TimeGrouper(level='Time', freq='2T'))['Value'].agg('mean') 
df_group.dropna(inplace=True) 
df_group = df_group.to_frame().reset_index() 
print(df_group) 

       Time  Value 
0 2015-04-24 06:38:00 0.021459 
1 2015-04-24 06:42:00 0.023844 
2 2015-04-24 06:44:00 0.020665 
3 2015-04-24 06:46:00 0.023844 
4 2015-04-24 06:48:00 0.019075 
5 2015-04-24 06:50:00 0.022254 
6 2015-04-24 06:52:00 0.020665 
7 2015-04-24 06:54:00 0.023844 
8 2015-04-24 07:00:00 0.020665 

Sie auch resample wie erwähnt von @ Paul H, die vielmehr verwenden könnte prägnant für diese Situation.

print(df.set_index('Time').resample('2T').mean().dropna().reset_index()) 

       Time  Value 
0 2015-04-24 06:38:00 0.021459 
1 2015-04-24 06:42:00 0.023844 
2 2015-04-24 06:44:00 0.020665 
3 2015-04-24 06:46:00 0.023844 
4 2015-04-24 06:48:00 0.019075 
5 2015-04-24 06:50:00 0.022254 
6 2015-04-24 06:52:00 0.020665 
7 2015-04-24 06:54:00 0.023844 
8 2015-04-24 07:00:00 0.020665 
+1

Liefert dies ein anderes Ergebnis als die direktere 'resample' Methode? http://pandas.pydata.org/pandas-docs/stable/timeseries.html#resampling –

+0

Ich habe es gerade versucht. Es ergibt das gleiche Ergebnis wie das vorherige. –

+0

Super! Danke an euch (@PaulH) – displayname