首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SQL中使用' in‘和'not in’过滤Pandas数据帧

如何在SQL中使用' in‘和'not in’过滤Pandas数据帧
EN

Stack Overflow用户
提问于 2013-11-14 01:11:07
回答 8查看 765.1K关注 0票数 651

如何实现SQL语言的INNOT IN的等价物

我有一个包含所需值的列表。以下是场景:

代码语言:javascript
复制
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
countries_to_keep = ['UK', 'China']

# pseudo-code:
df[df['country'] not in countries_to_keep]

我目前使用的方法如下:

代码语言:javascript
复制
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'])]

但这看起来像是一个可怕的杂技。有人能改进它吗?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2013-11-14 01:13:40

您可以使用pd.Series.isin

用于"IN“的用法:something.isin(somewhere)

或者是"NOT IN":~something.isin(somewhere)

作为一个有效的示例:

代码语言:javascript
复制
import pandas as pd

>>> 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   Germany
票数 1.2K
EN

Stack Overflow用户

发布于 2017-07-19 20:19:40

使用.query()方法的替代解决方案:

代码语言:javascript
复制
In [5]: df.query("countries in @countries_to_keep")
Out[5]:
  countries
1        UK
3     China

In [6]: df.query("countries not in @countries_to_keep")
Out[6]:
  countries
0        US
2   Germany
票数 113
EN

Stack Overflow用户

发布于 2013-11-14 01:14:32

我通常会像这样对行进行通用过滤:

代码语言:javascript
复制
criterion = lambda row: row['countries'] not in countries
not_in = df[df.apply(criterion, axis=1)]
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19960077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档