2017-06-24 2 views
1

これは私が持っているデータのサンプルです。特定の行より上のすべての行を削除するパンダのデータフレーム

Label | Time 
    start | 1.42 
    A  | 1.42 
    error | 2.21 
    C  | 2.24 
    C  | 2.24 
    error | 2.30 
    A  | 2.50 
    B  | 2.60 

ありますとにかく私は「エラー」の行自体(ラベル「T」と複数の行があるかもしれない)を含むラベル「エラー」を持っている行の上のすべての行を削除することができますか?
「start」と「error」の間のすべての行を削除しますか?

最終出力はdropstart最初と最後error、その後の間でインデックスの

Label | Time 
    start | 1.42 
    A  | 2.50 
    B  | 2.60 
+0

は何ですか希望の出力? – jezrael

+0

ありがとうございました。申し訳ありませんが、希望の出力を投稿します。 Iveは今質問を編集しました。 –

答えて

1

使用numpy.r_になるように:

idx = np.r_[df.index[df['Label'] == 'start'][0] + 1:df.index[df['Label'] == 'error'][-1] + 1] 
print (idx) 
[1 2 3 4 5] 

df = df.drop(idx) 
print (df) 
    Label Time 
0 start 1.42 
6  A 2.50 
7  B 2.60 

別の解決策:

a = (df['Label'] == 'start').shift().fillna(0).cumsum() 
b = (df['Label'] == 'error')[::-1].cumsum() 
m = a & b 
print (df[~m]) 
    Label Time 
0 start 1.42 
6  A 2.50 
7  B 2.60 
関連する問題