2016-07-07 18 views
2

Lasst uns sagen, dass ich die folgende Datenrahmen haben:Wie die Zeit zwischen dem Auftreten eines Ereignisses in einer Zeitreihe Datenrahmen berechnen

df 
         A  B  C D event 
Timestamp              
1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0  
1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0  
1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN  
1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0  
1991-04-22 13:40:00 2.0 NaN NaN NaN NaN  
1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0 

den Code mit

df['delta_time'] = (df['event']-df['event'].shift()).fillna(0) 

I

Timestamp    A  B  C D event  delta_time 

1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0  00:00:00 
1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0  07:59:00 
1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN  05:43:00 
1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0  08:44:00 
1991-04-22 13:40:00 2.0 NaN NaN NaN NaN  06:05:00 
1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0  03:16:00 
1991-04-23 07:25:00 11.0 13.0 NaN NaN 257.0  14:29:00 
bekommen

aber was ich suche ist

Timestamp              
1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0  00:00:00 
1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0  07:59:00 
1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN  NaN 
1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0  13:42:00 
1991-04-22 13:40:00 2.0 NaN NaN NaN NaN  NaN 
1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0  09:21:00 
1991-04-23 07:25:00 11.0 13.0 NaN NaN 257.0  14:29:00 

Ich möchte die Zeit berechnen, die jedes Mal abgelaufen ist, wenn ein Ereignis eintritt und die Zeiten weglassen, als das Ereignis ein NaN war. Was wäre der richtige Ansatz, um diesen Code zu schreiben?

+0

diese Zeile 'df [ 'delta_time wiederherstellen '] = (df [' Ereignis '] - df [' Ereignis ']. shift()). fillna (0) 'passt nicht zu Ihrer Ausgabe oder Absicht, da dies die Ereignisspalte subtrahiert, die numerisch ist – EdChum

Antwort

1

ich dies unter der Annahme ist, was Sie wollen, ich weiß nicht, ob Timestamp der Index ist oder nicht, aber das wird funktionieren, wenn es nicht der Index ist:

In [251]: 
df['delta_time'] = df.loc[df['event'].notnull(),'Timestamp'].diff() 
df 

Out[251]: 
      Timestamp  A  B  C D event delta_time 
0 1991-04-21 09:09:00 9.0 13.0 NaN NaN 100.0   NaT 
1 1991-04-21 17:08:00 7.0 NaN NaN NaN 119.0 07:59:00 
2 1991-04-21 22:51:00 NaN NaN 123.0 NaN NaN   NaT 
3 1991-04-22 07:35:00 10.0 13.0 NaN NaN 216.0 14:27:00 
4 1991-04-22 13:40:00 2.0 NaN NaN NaN NaN   NaT 
5 1991-04-22 16:56:00 7.0 NaN NaN NaN 211.0 09:21:00 

falls erforderlich Sie müssen reset_index anrufen den Index zurück, als eine Säule

grundsätzlich maskieren Sie die Zeilen von Interesse auf, wo das ‚Ereignis‘ nicht null ist und rufen Sie dann diff bekommen die inter-Zeilen Differenz

+0

@ EdChum Vielen Dank. Wirklich zu schätzen Ihre Eingabe – Pearl

+0

Wenn meine Antwort Ihre Frage gelöst hat, dann können Sie es akzeptieren, es wird ein leeres Häkchen oben links von meiner Antwort sein – EdChum