【问题标题】:Deleting rows in pandas data frame: Delete previous k rows each time a certain condition is met删除pandas数据框中的行:每次满足某个条件时删除前k行
【发布时间】:2017-10-18 12:41:31
【问题描述】:

我正在使用 Pandas 数据框 DF,如下所示。 DF中的所有元素要么是正整数要么是0。

如果列'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

数据框:

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']

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    根据this docs page,您可以通过df.drop(df.index[[2,3]]) 删除一系列行。因此,如果像您的示例一样,您发现第 5 行触发了 drop,您可以这样做:

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

    i 是 5。我还没有对此进行测试,但你可以将演员阵容放到 list

    【讨论】:

    • 谢谢。这有效(只需将 1 添加到 range 函数的两个参数)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-26
    • 2020-12-22
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 1970-01-01
    相关资源
    最近更新 更多