Reputation: 161
I am trying to remove different elements from different columns from the data frame.
Here is what I have tried so far
xdf
Out[46]:
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 Perfect
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
3 Tom Not Finished 15 10 5
drop_list = ["Perfect","Not Finished"]
xdf[~xdf["Score1"].isin(drop_list)]
Out[48]:
Name Score1 Score2 Score3 Score4
0 Jack 10 Perfect 10 Perfect
1 Jill 10 10 10 Not Finished
2 Jane 20 10 10 5
the above works great if I want to drop from only 1 column but I want to drop across multiple columns (Score1,Score2,Score3,Score4)
The following does not seem to work either:
xdf[~xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list)]
Out[49]:
Name Score1 Score2 Score3 Score4
0 NaN 10 NaN 10 NaN
1 NaN 10 10 10 NaN
2 NaN 20 10 10 5
3 NaN NaN 15 10 5
any ideas? thank you
Upvotes: 1
Views: 24
Reputation: 863501
Use DataFrame.any
for test at lest one True
per rows:
drop_list = ["Perfect","Not Finished"]
df = xdf[~xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list).any(axis=1)]
print (df)
Name Score1 Score2 Score3 Score4
2 Jane 20 10 10 5
print (xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list))
Score1 Score2 Score3 Score4
0 False True False True
1 False False False True
2 False False False False
3 True False False False
print (xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list).any())
Score1 True
Score2 True
Score3 False
Score4 True
dtype: bool
print (~xdf[["Score1","Score2","Score3","Score4"]].isin(drop_list).any())
Score1 False
Score2 False
Score3 True
Score4 False
dtype: bool
Upvotes: 1