2017-10-18 27 views
0

我正在使用如下所示的熊猫数据框DF。 DF中的所有元素都是正整数或0.在pandas数据框中删除行:每次满足特定条件时删除前k行

如果列“c”在第i行包含等于k的值,使得k大于或等于2,我想删除第i行,行(i-1),...和行(i-(k-1))(总共k行被删除)。我只要求行被删除时柱“c”的具有至少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

根据this docs page可以滴范围的行由df.drop(df.index[[2,3]])。所以,如果在你的榜样,你会发现该行5触发下降,你可以这样做有:

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

其中i是5.我没有测试过这一点,但你也许能降投到list

+0

谢谢。这工作(只需要添加1范围函数的两个参数)。 –

相关问题