2016-12-13 3 views
1

Ich habe ein Jahr lang Datensatz mit Daten und Temperaturen, die alle 15 Minuten Probe mit gelegentlichen Lücken in den Daten in Python ist. Ich habe die Daten und die Temperaturen in einen Datenrahmen in Pandas gespeichert:Resample Zeitreihendaten stündlich mit Lücken

2015-08-21 09:35:47 27.928 
2015-08-21 09:55:47 28.839 
2015-08-21 10:15:47 28.495 
... 
2016-08-10 05:39:24 11.246 
2016-08-10 05:59:24 11.912 
2016-08-10 06:19:24 13.066 

Ich möchte die Daten in jeder Stunde sampeln und versuchte, mit dieser Zeile:

newDat=data.resample(rule='H') 

ich auch versucht, die erste mit und zuletzt 'wie', aber immer noch nicht bekommen, wonach ich gesucht habe. Meine Ergebnisse sahen wie aus:

2015-08-21 09:00:00 28.383500 
2015-08-21 10:00:00 27.959667 
2015-08-21 11:00:00 29.513333 
... 
2016-08-10 06:00:00 14.235667 
2016-08-10 07:00:00 20.867333 
2016-08-10 08:00:00 26.725000 

Ich möchte nicht die tatsächlichen Temperatur- oder Zeitwerte geändert. Ich würde den Befehl wie das erste Mal in jeder Stunde des Tages zu packen, damit ich so etwas wie:

2015-08-21 09:15:47 27.925 
2015-08-21 10:15:47 28.495 
2015-08-21 11:15:47 27.596 
... 
2016-08-10 07:19:24 16.944 
2016-08-10 08:19:24 27.149 
2016-08-10 09:19:24 28.152 

Antwort

4

Die DataFrame.groupby Verfahren eine Folge von Werten als Gruppenschlüssel annehmen können. Es wird erwartet, dass die Länge der Sequenz mit der Anzahl der Zeilen im DataFrame identisch ist, und die Zeilen, die gleichwertigen Elementen in der Sequenz entsprechen, werden gruppiert.

So könnte man Daten auf die nächste Stunde als Gruppenschlüssel abgeschnitten verwenden:

In [133]: groupkey = data['date'].values.astype('datetime64[h]'); groupkey 
Out[133]: 
array(['2015-08-21T09', '2015-08-21T09', '2015-08-21T10', '2016-08-10T05', 
     '2016-08-10T05', '2016-08-10T06'], dtype='datetime64[h]') 

import pandas as pd 
Timestamp = pd.Timestamp 
data = pd.DataFrame({'date': [Timestamp('2015-08-21 09:35:47'), Timestamp('2015-08-21 09:55:47'), Timestamp('2015-08-21 10:15:47'), Timestamp('2016-08-10 05:39:24'), Timestamp('2016-08-10 05:59:24'), Timestamp('2016-08-10 06:19:24')], 'temp': [27.928000000000001, 28.839000000000002, 28.495000000000001, 11.245999999999999, 11.912000000000001, 13.065999999999999]}) 

groupkey = data['date'].values.astype('datetime64[h]') 
result = data.groupby(groupkey).first().set_index('date') 
print(result) 

Ausbeuten

     temp 
date      
2015-08-21 09:35:47 27.928 
2015-08-21 10:15:47 28.495 
2016-08-10 05:39:24 11.246 
2016-08-10 06:19:24 13.066 
+0

ich ‚Valueerror: Konnte nicht Objekt NumPy Datetime konvertieren 'wenn ich die Gruppentelefonleitung versuche. – Strak

+0

Welche Version von Numpy und Pandas verwenden Sie? (Überprüfen Sie 'np .__ version__' und 'pd .__ version__'). Auch, was ist 'Daten [' Datum ']. Values.dtype'? – unutbu

+0

numpy Version '1.10.4' und Pandas Version '0.17.1', und dtype ('O') – Strak