python pandas loc — фильтр для списка значений

Это должно быть невероятно легко, но я не могу заставить его работать.

Я хочу отфильтровать свой набор данных по двум или более значениям.

#this works, when I filter for one value
df.loc[df['channel'] == 'sale'] 

#if I have to filter, two separate columns, I can do this
df.loc[(df['channel'] == 'sale')&(df['type']=='A')] 

#but what if I want to filter one column by more than one value?
df.loc[df['channel'] == ('sale','fullprice')] 

Должно ли это быть оператором ИЛИ? Я могу сделать что-то вроде SQL, используя in?


person jeangelj    schedule 21.08.2017    source источник


Ответы (1)


Существует метод df.isin(values), который проверяет, элемент в DataFrame содержится в values. Итак, как написал @MaxU в комментарии, вы можете использовать

df.loc[df['channel'].isin(['sale','fullprice'])]

для фильтрации одного столбца по нескольким значениям.

person taras    schedule 21.08.2017
comment
df.loc[df['channel'].apply(lambda x: x in ['sale','fullprice'])] тоже подойдет. Это не так кратко, как использование df.isin, но его можно изменить, чтобы проверить любое сложное условие, зависящее только от одного столбца. - person tipanverella; 21.08.2017
comment
Да, безусловно. - person taras; 21.08.2017