본문 바로가기
Python/Python FAQ

Python SQL과 같이 'in' 및 'not in'을 사용하여 Pandas 데이터프레임을 필터링하는 방법, How to filter Pandas dataframe using 'in' and 'not in' like in SQL

by 베타코드 2023. 7. 3.
반응형

질문


SQL의 INNOT 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
반응형

댓글