snippetpythonCriticalCanonical
How to filter Pandas dataframe using 'in' and 'not in' like in SQL
Viewed 0 times
howandsqldataframeusinglikepandasnotfilter
Problem
How can I achieve the equivalents of SQL's
I have a list with the required values. Here's the scenario:
My current way of doing this is as follows:
But this seems like a horrible kludge. Can anyone improve on it?
IN and NOT IN?I have a list with the required values. Here's the scenario:
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
countries_to_keep = ['UK', 'China']
# pseudo-code:
df[df['country'] not in countries_to_keep]
My current way of doing this is as follows:
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
df2 = pd.DataFrame({'country': ['UK', 'China'], 'matched': True})
# IN
df.merge(df2, how='inner', on='country')
# NOT IN
not_in = df.merge(df2, how='left', on='country')
not_in = not_in[pd.isnull(not_in['matched'])]
But this seems like a horrible kludge. Can anyone improve on it?
Solution
You can use
For "IN" use:
Or for "NOT IN":
As a worked example:
pd.Series.isin.For "IN" use:
something.isin(somewhere)Or for "NOT IN":
~something.isin(somewhere)As a worked example:
>>> df
country
0 US
1 UK
2 Germany
3 China
>>> countries_to_keep
['UK', 'China']
>>> df.country.isin(countries_to_keep)
0 False
1 True
2 False
3 True
Name: country, dtype: bool
>>> df[df.country.isin(countries_to_keep)]
country
1 UK
3 China
>>> df[~df.country.isin(countries_to_keep)]
country
0 US
2 GermanyCode Snippets
>>> df
country
0 US
1 UK
2 Germany
3 China
>>> countries_to_keep
['UK', 'China']
>>> df.country.isin(countries_to_keep)
0 False
1 True
2 False
3 True
Name: country, dtype: bool
>>> df[df.country.isin(countries_to_keep)]
country
1 UK
3 China
>>> df[~df.country.isin(countries_to_keep)]
country
0 US
2 GermanyContext
Stack Overflow Q#19960077, score: 1551
Revisions (0)
No revisions yet.