Как использовать И обусловливать в pandas при работе с value_counts?

#python #pandas #dataframe

#python #pandas #фрейм данных

Вопрос:

В принципе, я хочу отфильтровать фрейм данных Pandas с помощью value_counts() , однако я также хочу сделать исключение. Например, это пример кода:

 import pandas as pd

df = pd.DataFrame({
    'city': ['NYC', 'NYC', 'SYD', 'NYC', 'SEL', 'NYC', 'NYC']
})

value_counts = df['city'].value_counts()
to_remove = value_counts[value_counts <= 3].index

df = df[(~df.city.isin(to_remove)) amp; (df.city == 'SEL')]
 

Я хотел бы отобразить оба NYC, которые соответствуют условию value_counts(), но я также хочу сделать исключение для ‘SEL’

Ответ №1:

Использовать | для побитового OR :

 df = df[(~df.city.isin(to_remove)) | (df.city == 'SEL')]
print (df)
  city
0  NYC
1  NYC
3  NYC
4  SEL
5  NYC
6  NYC
 

Другое решение с Series.map и Series.gt для инвертирования маски из <= в > :

 value_counts = df['city'].value_counts()

df = df[df['city'].map(value_counts).gt(3) | (df.city == 'SEL')]
print (df)
  city
0  NYC
1  NYC
3  NYC
4  SEL
5  NYC
6  NYC