2016-08-09 4 views
1

私はパンダdf1datetimeの列とcountの列を持っています。 1時間連続して0の文字列があり、その時間内に2分未満のデータ> 0(「スパイク耐性」)がある場合、無効と見なされます。時間に基づいてPythonで連続するゼロを見つける

datetimeは5秒間隔で表示されますが、常に一致するとは限りません(つまり、6:00:00から14:00:00に飛び越して、その間をスキップすることができます)。そのため、行間の差は5秒連続した期間と見なされる。

私は新しい列flagを追加して、無効の場合は0、有効な場合は1をマークします。

サンプルデータ

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

サンプルとデータを追加できますか? – jezrael

+1

時間は固定されていますか(1-2,2-3など)か、それとも「過去60分」の計算になりますか? – SO44

+0

それはヘルプをまったく編集しますか?私はそれを明確にしようとしましたが、それほど簡単ではありませんでした。それは圧延計算されます、それは物事をさらにトリッキーにしていますか? –

答えて

0
転置

とシリーズにそれを回す:

y = df.T.unstack() 

その後パンダ内の連続GROUPBYの不足を補うために:

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 

これが得られます連続する値の数

+0

's'が定義されていないというエラーが出ました –

+0

' y *(y!= y.shift())。cumsum())。cumcount()+ 1) 'あなたのシリーズtell私はそれが働いた場合 – SerialDev

関連する問題