如何实现 SQL 的 IN
和 NOT IN
的等价物?
我有一个包含所需值的列表。这是场景:
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
countries_to_keep = ['UK', 'China']
# pseudo-code:
df[df['country'] not in countries_to_keep]
我目前的做法如下:
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'])]
但这似乎是一个可怕的组合。任何人都可以改进它吗?
原文由 LondonRob 发布,翻译遵循 CC BY-SA 4.0 许可协议
您可以使用
pd.Series.isin
。对于“IN”使用:
something.isin(somewhere)
或者对于“不在”:
~something.isin(somewhere)
作为一个工作示例: