1

How can I drop some values from a dataframe using another dataframe as parameter?

df1
code | reply
A1   | yes
A2   | yes
A3   | no

df2
code |
A1   |
A1   |
A3   |

df_new = df1.drop(df1['code'] == df2['code'] & df1['reply'] != 'yes')

df_new
code | reply
A1   | yes

Is there a simple way to do this using .drop()?

1

2 Answers 2

2

Use boolean indexing:

out = df1[df1['code'].isin(df2['code']) & df1['reply'].eq('yes')]

Output:

  code reply
0   A1   yes
Sign up to request clarification or add additional context in comments.

4 Comments

Is there a "inverse" of .eq() in pandas? I'll use it too
ne() is the opposite of eq()
@null92. For your information AND and & are not the same thing.
@mozway. In fact, I will removed my answer. It does not make sense to use merge here
1

The logic is unclear but you can accomplish what you want without the use of drop:

>>> df1[df1['reply'] == 'yes'].merge(df2.drop_duplicates('code'))

  code reply
0   A1   yes

4 Comments

actually your drop and my indexing are equivalent using De Morgan's law, so yes I always try to keep the most simple variant in such cases ;)
That's why I'm pointing it out to the OP.
I was about to add this variant and the wikipedia link in my answer so I commented instead as you had just edited ;)
OK. I removed this part from my answer.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.