Python 基于同一关键点删除熊猫中的行
如果列A是键,并且该键的任何行在列C中同时包含“foo”和“moo”,我如何删除这些行 df_之前: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
"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