2017-11-22 1 views
0

ich einige Daten in folgendem Format haben:Pandas Zeitreihen Manipulation

id 1234 5678 9876  
date                      
2017-10-22 11:12:21.926000000 NaN  NaN  NaN  
2017-10-22 11:16:34.589000000 NaN  5  NaN 
2017-10-22 11:20:45.192000000 NaN  NaN  10 
2017-10-22 11:22:22.361000000 12  NaN  NaN 
2017-10-22 11:25:25.034000000 NaN  8  NaN 

ich diese Daten in die richtige Minute für Minute Zeitreihen reinigen wollen und tragen forwad die Werte für jede Minute, bis ein neuer Wert gefunden die ID in der Zeit "für den benötigten Zeitbereich".

Ausgang:

id 1234 5678 9876  
date                      
2017-10-22 11:12:00  NaN  NaN  NaN  
2017-10-22 11:13:00  NaN  NaN  NaN  
2017-10-22 11:14:00  NaN  NaN  NaN  
2017-10-22 11:15:00  NaN  NaN  NaN  
2017-10-22 11:16:00  NaN  5  NaN 
2017-10-22 11:17:00  NaN  5  NaN 
2017-10-22 11:18:00  NaN  5  NaN 
2017-10-22 11:19:00  NaN  5  NaN 
2017-10-22 11:20:00  NaN  5  10 
2017-10-22 11:21:00  NaN  5  10 
2017-10-22 11:22:00  12  5  10 
2017-10-22 11:23:00  12  5  10 
2017-10-22 11:24:00  12  5  10 
2017-10-22 11:25:00  12  8  10 
2017-10-22 11:26:00  12  8  10 

Ich habe versucht, neue Datenrahmen zu schaffen und es mit dem alten verschmelzen aber nicht mit viel Glück. Vielen Dank für Anregungen.

Antwort

1

‚d‘ Unter der Annahme, ist der Datenrahmen Sie als Ausgangspunkt zeigen dann:

d.date = pd.to_datetime(d.date).values.astype('<M8[m]') 
d = d.set_index('date') 
d.resample('1Min').ffill().fillna(method='ffill') 

Sie müssen ‚abhacken‘ die Sekunden und Bruchteile von Sekunden durch den Aufruf .values.astype('<M8[m]') weil ffill Runden bis sogar für ein paar Sekunden. Auch die zwei ffill Aufrufe scheinen komisch, aber wenn Sie mit nur einem versuchen, werden Sie sehen, dass Dinge nur teilweise ausgefüllt werden, bis ein anderer Nicht-NaN-Wert in irgendeiner Spalte auftaucht.

Und stellen Sie auch sicher, dass "Datum" als Index festgelegt ist.

+0

Danke dafür. Es gibt zwar einige Duplikate im Datumsbereich: ValueError: kann einen nicht eindeutigen Index nicht mit einer Methode oder einem Limit neu indizieren; 2017-10-07 00:00:00 \t NaN, \t 2017-10-07 00:00:00 \t NaN, Dies scheitert in der letzten Zeile. D.resample ('1Min') ffill() .fillna (method = 'ffill') – Vivek

+0

Es macht nichts, da wir Sekunden eliminiert haben, fügte es Duplikate hinzu, musste ich neu gruppieren. – Vivek