2016-08-09 117 views
1

Ich habe eine Pandas df1 mit einer datetime Spalte und eine count Spalte. Wenn eine Folge von 0 für eine zusammenhängende Stunde und weniger als 2 Minuten von Daten> 0 innerhalb dieser Stunde (eine Spike-Toleranz) vorhanden ist, wird dies als ungültig betrachtet.Finden Sie aufeinanderfolgende Nullen in Python, basierend auf Zeit

Die datetime ist in 5-Sekunden-Intervallen, aber nicht immer konsistent (dh kann von 6:00:00 bis 14:00:00 springen, die ganze Zeit zwischen überspringen), so dass der Unterschied zwischen den Zeilen 5 Sekunden sein sollte als aufeinanderfolgender Zeitraum betrachtet werden.

Ich möchte eine neue Spalte flag hinzufügen, die eine 0 für ungültig und eine 1 für gültig markiert.

Beispieldaten

time  count  flag 
00:00:05  0   0 
00:00:10  0   0 
.....   all 0  0 
01:00:05  0   0 
01:00:10  33   1 
01:00:15  19   1 
.......  n>0   1 
02:00:10  12   1 
+3

Können Sie Beispieldaten und die gewünschte Ausgabe hinzufügen? – jezrael

+1

Sind die Stunden fest (d. H. 1-2, 2-3) oder ist es eine rollende "letzte 60 Minuten" Berechnung? – SO44

+0

Bearbeiten diese Hilfe überhaupt? Ich habe versucht es klarzustellen, aber nicht zu einfach. Es wäre eine rollende Berechnung, macht das die Sache noch kniffliger? –

Antwort

0

umgesetzt und in eine Serie drehen:

y = df.T.unstack() 

Dann mangels zusammenhängenden groupby in Pandas zu bilden:

y * (y.groupby((y != y.shift()).cumsum()).cumcount() + 1) 

OUT: 0  0 
1  0 
2  1 
3  2 
4  3 
5  0 
6  0 
7  1 
8  0 
9  1 
10 2 

Dies ergeben die Anzahl der aufeinanderfolgenden Werte

+0

Ich habe eine Fehlermeldung erhalten, dass 's' undefiniert ist –

+0

' y * (y.groupby ((y! = Y.shift()). Cumsum()). Cumcount() + 1) 'Wende das auf deine Serie an ich, wenn es geklappt hat – SerialDev