#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