我正在使用pandas数据框DF,如下所示。 DF中的所有元素都是正整数或0。
如果列'c'在第i行中包含等于k的值,使得k大于或等于2,我想删除第i行,第(i-1)行,...,和row(i-(k-1))(因此删除总共k行)。当
在这个例子中,这发生一次,其中'k'等于3,并且在第5行中找到(所以我删除第5行,第4行和第3行 - 总共三行,包括包含值'3'的行。
注意,如果列'c'的第j行等于k,则先前的k-1行肯定等于0,这意味着如果删除行j,则删除的所有其他行将仅包含列c中的零。
有没有人对如何做到这一点有任何想法?
对于具有所需结果的示例数据框的图像,请参阅https://i.imgur.com/2QpC7JF.png:
数据框:
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']
答案 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
。