Python 基于同一关键点删除熊猫中的行

Python 基于同一关键点删除熊猫中的行,python,pandas,dataframe,Python,Pandas,Dataframe,如果列A是键,并且该键的任何行在列C中同时包含“foo”和“moo”,我如何删除这些行 df_之前: "cat" |"waverly way"|"foo"|10.0 "cat" |"smokey st" |"moo"|9.7 "rabbit"|"rapid ave" |"foo"|6.6 "rabbit"|"far blvd" |"too"|3.2 df_之后: "rabbit"|"rapid ave" |"foo"|6.6 "rabbit"|"far blvd" |"t

如果列A是键,并且该键的任何行在列C中同时包含“foo”和“moo”,我如何删除这些行

df_之前:

"cat"   |"waverly way"|"foo"|10.0
"cat"   |"smokey st"  |"moo"|9.7
"rabbit"|"rapid ave"  |"foo"|6.6
"rabbit"|"far blvd"   |"too"|3.2
df_之后:

"rabbit"|"rapid ave"  |"foo"|6.6
"rabbit"|"far blvd"   |"too"|3.2

我把每列都称为A、B和C。 我以前给你的DFU打过电话

希望这有帮助(如果它不能完全工作:-p)


您可以这样做:

df.columns = ['A', 'B', 'C', 'D']
df:

修改的df:

        A            B        C     D
0     cat  waverly way  foo,moo  10.0
1     cat    smokey st  foo,moo   9.7
2  rabbit    rapid ave  foo,too   6.6
3  rabbit     far blvd  foo,too   3.2

输出:

        A          B        C    D
0  rabbit  rapid ave  foo,too  6.6
1  rabbit   far blvd  foo,too  3.2

下面是另一种方法:

x = df.groupby(by=['A'])['C'].agg(' '.join).str.contains((r'(?=.*foo)(?=.*moo)')).reset_index()
index = list(x[x['C']==True]['A'])
print(df[~df['A'].isin(index)])

        A            B    C    D
2  rabbit  rapid ave    foo  6.6
3  rabbit  far blvd     too  3.2
        A            B        C     D
0     cat  waverly way  foo,moo  10.0
1     cat    smokey st  foo,moo   9.7
2  rabbit    rapid ave  foo,too   6.6
3  rabbit     far blvd  foo,too   3.2
# applied negative mask to filter values with foo,moo in 'C'
df1 = df.loc[~df['C'].isin(filter)].reset_index(drop=True)

print(df1)
        A          B        C    D
0  rabbit  rapid ave  foo,too  6.6
1  rabbit   far blvd  foo,too  3.2
x = df.groupby(by=['A'])['C'].agg(' '.join).str.contains((r'(?=.*foo)(?=.*moo)')).reset_index()
index = list(x[x['C']==True]['A'])
print(df[~df['A'].isin(index)])

        A            B    C    D
2  rabbit  rapid ave    foo  6.6
3  rabbit  far blvd     too  3.2