这是我的数据样本。
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 :(得分: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