2017-06-13 12 views
1

私は、バルブを開閉しながら測定する実験を行っています。私は、完全に開いて完全にクローゼットを示すリミットスイッチを持っています。私は閉じたり開いたりしている間だけデータに興味があります。私のpythonで、興味のある分野を取得する方法を考え出したデータフレームを複数の(連続した)時系列に分割する

Time      Flow_A Flow_B  Open closed    
2017-06-12 09:46:31.068 0.000933 295.933070 1 0 
2017-06-12 09:46:31.660 0.287122 292.727820 1 0 
2017-06-12 09:46:32.252 0.256170 288.869600 0 0 
2017-06-12 09:46:32.844 0.052523 284.265850 0 0 
2017-06-12 09:46:33.437 0.367495 278.394200 0 1 
2017-06-12 09:46:34.029 1.956472 270.846450 0 1 
2017-06-12 09:46:34.621 5.265860 260.768250 0 0 
2017-06-12 09:46:35.214 12.328835 248.132450 0 0 
2017-06-12 09:46:35.807 22.592590 232.688620 1 0 
2017-06-12 09:46:36.400 35.768205 214.997420 1 0 
2017-06-12 09:46:36.992 51.623265 195.298150 1 0 
2017-06-12 09:46:37.584 70.855590 174.048000 1 0 

mask = (data['Open']==0 & (data['Port_2'] == 0) 
data.loc[mask] 

これは私を与える:

Time      Flow_A Flow_B  Open closed 
2017-06-12 09:46:32.252 0.256170 288.869600 0 0 
2017-06-12 09:46:32.844 0.052523 284.265850 0 0 
2017-06-12 09:46:34.621 5.265860 260.768250 0 0 
2017-06-12 09:46:35.214 12.328835 248.132450 0 0 
を 私のパンダのデータセットは、この(簡体字)のように見えます

質問は、2つの連続するデータセットに分割/分割/サブセットを分割する方法です。期間は不明であり、ログエントリ間の間隔は正確に同一ではありません。私は、連続したデータがマスクに見つかるはずだと思っていますが、どうやってそれを行うのかはわかりません。

+0

私はconsecutives時系列を理解してかどうかわからないですが - あなたはマスクどのによってフィルタリングされたすべての行を分割する必要がありますか連続している、例えば私の答えのようないくつかの新しいコラムで?または、他の何か? – jezrael

答えて

0

私はあなたが必要だと思う:

mask = (data['Open']==0) & (data['closed'] == 0) 
data.loc[mask, 'groups'] = mask.ne(mask.shift())[mask].cumsum() 
print (data) 
        Time  Flow_A  Flow_B Open closed groups 
2017-06-12 09:46:31.068 0.000933 295.93307  1  0  NaN 
2017-06-12 09:46:31.660 0.287122 292.72782  1  0  NaN 
2017-06-12 09:46:32.252 0.256170 288.86960  0  0  1.0 
2017-06-12 09:46:32.844 0.052523 284.26585  0  0  1.0 
2017-06-12 09:46:33.437 0.367495 278.39420  0  1  NaN 
2017-06-12 09:46:34.029 1.956472 270.84645  0  1  NaN 
2017-06-12 09:46:34.621 5.265860 260.76825  0  0  2.0 
2017-06-12 09:46:35.214 12.328835 248.13245  0  0  2.0 
2017-06-12 09:46:35.807 22.592590 232.68862  1  0  NaN 
2017-06-12 09:46:36.400 35.768205 214.99742  1  0  NaN 
2017-06-12 09:46:36.992 51.623265 195.29815  1  0  NaN 
2017-06-12 09:46:37.584 70.855590 174.04800  1  0  NaN 

print (data[mask]) 
        Time  Flow_A  Flow_B Open closed groups 
2017-06-12 09:46:32.252 0.256170 288.86960  0  0  1.0 
2017-06-12 09:46:32.844 0.052523 284.26585  0  0  1.0 
2017-06-12 09:46:34.621 5.265860 260.76825  0  0  2.0 
2017-06-12 09:46:35.214 12.328835 248.13245  0  0  2.0 

また0からintストラト必要があれば:

data.loc[mask, 'groups'] = mask.ne(mask.shift())[mask].cumsum() 
data['groups'] = data['groups'].fillna(0).astype(int) - 1 
print (data) 
        Time  Flow_A  Flow_B Open closed groups 
2017-06-12 09:46:31.068 0.000933 295.93307  1  0  -1 
2017-06-12 09:46:31.660 0.287122 292.72782  1  0  -1 
2017-06-12 09:46:32.252 0.256170 288.86960  0  0  0 
2017-06-12 09:46:32.844 0.052523 284.26585  0  0  0 
2017-06-12 09:46:33.437 0.367495 278.39420  0  1  -1 
2017-06-12 09:46:34.029 1.956472 270.84645  0  1  -1 
2017-06-12 09:46:34.621 5.265860 260.76825  0  0  1 
2017-06-12 09:46:35.214 12.328835 248.13245  0  0  1 
2017-06-12 09:46:35.807 22.592590 232.68862  1  0  -1 
2017-06-12 09:46:36.400 35.768205 214.99742  1  0  -1 
2017-06-12 09:46:36.992 51.623265 195.29815  1  0  -1 
2017-06-12 09:46:37.584 70.855590 174.04800  1  0  -1 

print (data[mask]) 
        Time  Flow_A  Flow_B Open closed groups 
2017-06-12 09:46:32.252 0.256170 288.86960  0  0  0 
2017-06-12 09:46:32.844 0.052523 284.26585  0  0  0 
2017-06-12 09:46:34.621 5.265860 260.76825  0  0  1 
2017-06-12 09:46:35.214 12.328835 248.13245  0  0  1 
関連する問題