根据列中的值删除行 (pandas)

Removing rows based off of a value in a column (pandas)

如果列 'Comment' 中包含 'Bad Process',我将尝试删除行值。

    ID Name         Comment
0     W12D0           Fine
1     W12D0    Bad Process
2     W12D0           What
3     W12D4           Fine
4     W12D5         Random
5     W12D5           Fine
..      ...            ...

注意 ID 名称“W12D0”如何有 3 条评论:好的,糟糕的过程,什么。因为那个 ID 名称有 'Bad Process' 对应,所以我想删除所有出现的 W12D0。本质上我正在寻找看起来像这样的数据(带重新索引):

    ID Name         Comment
1     W12D4           Fine
2     W12D5         Random
3     W12D5           Fine
..      ...            ...

您可以使用 .loc 获取“评论”列中具有 'Bad Process' 的所有行的 ID Name

然后您再次使用 .loc,但这次用作过滤掉不良记录的掩码。 tilda (~) 是一个否定,因此它会在数据框中找到 ID 名称不在错误记录列表中的行。

bad = df.loc[df.Comment.str.contains('Bad Process'), 'ID Name']
df_good = df.loc[~df['ID Name'].isin(bad)]

>>> df_good
  ID Name Comment
3   W12D4    Fine
4   W12D5  Random
5   W12D5    Fine

首先找出坏行:

bad_rows = df[df.Comment == 'Bad Process'].Name

然后从数据框中删除它们:

df[-df.Name.isin(bad_rows)]