반응형
질문
SQL의 IN
과 NOT IN
과 동일한 결과를 어떻게 얻을 수 있을까요?
필요한 값들로 이루어진 리스트가 있습니다. 다음은 시나리오입니다:
df = pd.DataFrame({'country': ['US', 'UK', 'Germany', 'China']})
countries_to_keep = ['UK', 'China']
# 의사 코드:
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'])]
하지만 이 방법은 좋지 않은 해결책 같습니다. 더 나은 방법이 있을까요?
답변
다음과 같은 pd.Series.isin
을 사용할 수 있습니다.
"IN"을 사용하는 경우: something.isin(somewhere)
"NOT IN"을 사용하는 경우: ~something.isin(somewhere)
예시로 다음과 같이 사용할 수 있습니다:
>>> 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
반응형
댓글