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

时间:2015-08-13 21:30:38

标签: python pandas indexing row dataframe

如果列'评论'我试图删除行值。有'坏过程''在里面。

    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名称具有“错误处理”功能。对应它,我想删除所有出现的W12D0。基本上我正在寻找看起来像这样的数据(带重新索引):

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

2 个答案:

答案 0 :(得分:2)

您可以使用.loc获取“评论”列中包含“错误流程”的所有行的ID Name

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

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

答案 1 :(得分:1)

首先识别坏行:

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

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

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