In [1]:
import pandas as pd

In [3]:
df = pd.DataFrame({'A':[1,10,1,23], 
                 'B':[20, 4, 5, 7],
                 'C':[3,5,8,18]})

In [4]:
df


Out[4]:
A B C
0 1 20 3
1 10 4 5
2 1 5 8
3 23 7 18

isin 사용


In [16]:
df


Out[16]:
A B C
0 1 20 3
1 10 4 5
2 1 5 8
3 23 7 18

In [8]:
filter_list_a = [1]
filter_list_b = [20, 5]
filter_list_c = [3, 8]

In [10]:
df[df['A'].isin(filter_list_a) & df['B'].isin(filter_list_b) & df['C'].isin(filter_list_c)]


Out[10]:
A B C
0 1 20 3
2 1 5 8

isin을 한번에 하고 sum


In [43]:
df


Out[43]:
A B C
0 1 20 3
1 10 4 5
2 1 5 8
3 23 7 18

In [42]:
df[df[['A', 'B', 'C']].isin([1,20,3,5,8]).sum(axis=1) == len(df.columns)]


Out[42]:
A B C
0 1 20 3
2 1 5 8

In [44]:
# 필요한 값들이 있는지 T/F로 나뉨
df[['A', 'B', 'C']].isin([1,20,3,5,8])


Out[44]:
A B C
0 True True True
1 False False True
2 True True True
3 False False False

In [45]:
# axis=1로 합침
df[['A', 'B', 'C']].isin([1,20,3,5,8]).sum(axis=1)


Out[45]:
0    3
1    1
2    3
3    0
dtype: int64

In [46]:
# axis=1로 합쳐서 column 개수만큼이라면 모든 조건을 만족
df[['A', 'B', 'C']].isin([1,20,3,5,8]).sum(axis=1) == len(df.columns)


Out[46]:
0     True
1    False
2     True
3    False
dtype: bool

Mask 만들기

  • 이거 근데 처음 한거랑 같아서 패스

In [12]:
def make_mask(column_name, filter_list):
    mask = df[column_name].isin(filter_list)
    return mask

In [47]:
df[['A', 'B', 'C']].isin([1,20,3,5,8]).all()


Out[47]:
A    False
B    False
C    False
dtype: bool

In [17]:
df[make_mask('A', filter_list_a)][make_mask('B', filter_list_b)][make_mask('C', filter_list_c)]


/usr/local/lib/python3.7/site-packages/ipykernel_launcher.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.
  """Entry point for launching an IPython kernel.
Out[17]:
A B C
0 1 20 3
2 1 5 8

isin에서 all로 합치기


In [51]:
df[df.isin([1,20,3,1,5,8]).all(axis=1)]


Out[51]:
A B C
0 1 20 3
2 1 5 8

In [52]:
df.isin([1,20,3,1,5,8]).all(axis=1)


Out[52]:
0     True
1    False
2     True
3    False
dtype: bool