删除pandas数据框中的行:每次满足特定条件时删除前k行

时间:2017-10-18 12:41:32

标签: python pandas dataframe

我正在使用pandas数据框DF,如下所示。 DF中的所有元素都是正整数或0。

如果列'c'在第i行中包含等于k的值,使得k大于或等于2,我想删除第i行,第(i-1)行,...,和row(i-(k-1))(因此删除总共k行)。当列的值至少为2时,要求删除行。

在这个例子中,这发生一次,其中'k'等于3,并且在第5行中找到(所以我删除第5行,第4行和第3行 - 总共三行,包括包含值'3'的行。

注意,如果列'c'的第j行等于k,则先前的k-1行肯定等于0,这意味着如果删除行j,则删除的所有其他行将仅包含列c中的零。

有没有人对如何做到这一点有任何想法?

对于具有所需结果的示例数据框的图像,请参阅https://i.imgur.com/2QpC7JF.png

enter image description here

数据框:

A = matrix([[9, 9, 0, 9, 9],
    [1, 2, 1, 9, 9],
    [8, 8, 0, 2, 3],
    [7, 7, 0, 7, 8],
    [1, 2, 0, 3, 4],
    [6, 6, 3, 6, 6],
    [1, 2, 0, 1, 2]])
DF = pd.DataFrame(A)
DF.columns = ['a', 'b', 'c', 'd', 'e']

1 个答案:

答案 0 :(得分:1)

根据this docs page,您可以按df.drop(df.index[[2,3]])删除一系列行。因此,如果在您的示例中,您发现第5行触发了drop,则可以使用以下命令执行此操作:

df.drop(df.index[list(range(i-3, i))])

其中i是5.我没有对此进行测试,但您可以将演员表放到list