删除特定行上方的所有行Pandas dataframe

时间:2017-06-24 05:17:59

标签: python pandas

这是我的数据样本。

    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

1 个答案:

答案 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