2017-06-24 100 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'之間的所有行?

,這樣最後的結果將是

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

是什麼期望的輸出? – jezrael

+0

謝謝你的回答。對不起,沒有發佈所需的輸出。我現在編輯了這個問題。 –

回答

1

使用numpy.r_的第一start和最後error之間,指數再drop

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 
相關問題