Python Удалить ряды в датасете по условию

Датасет: s

kills_list = {
    name:"CSS для начинающих"
    period:1.0
    company:"Code Basics"
    CATEGORY:"CSS"
}
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 7457 entries, 0 to 7456

Мне нужно удалить всё строки из всех колонок датасета, если в колонке:

CATEGORY   . value_counts > 16 и < 1000

Я пробовала так:

skills_list_cut = skills_list.drop(
    skills_list.map(lambda x: x.value_counts('CATEGORY')) > 16 < 1000)

Ответы (2 шт):

Автор решения: Алексей Р

Пояснения в комментариях

skills_list = pd.DataFrame({'CATEGORY': [1000] * 17 + [900] * 16 + [5] * 25 + [3] * 7000 + [4] * 1000}) # генерируем данные

vc = skills_list.CATEGORY.value_counts()
vc = vc[vc.between(16, 1000, inclusive='neither')].index.to_list() # отбираем все строки с числами, количество которых находится в диапазоне от 16 до 1000, не включая границы
skills_list = skills_list[skills_list['CATEGORY'].isin(vc)] # отбираем строки исходного фрейма, содержащие отобранные ранее числа
print(skills_list)

Результат: во фрейме остались строки с числами 1000 и 5, поскольку 1000 повторяется 17 раз, а 5 повторяется 25 раз, т.е. кол-во повторов в диапазоне от 16 до 1000

    CATEGORY
0       1000
1       1000
2       1000
...
15      1000
16      1000
33         5
34         5
...
56         5
57         5
→ Ссылка
Автор решения: german_filipov

ты лучше на выбросы проверь, да удали их

df[columns_to_clean] = df[columns_to_clean].apply(pd.to_numeric, errors="coerce")
def remove_outliers(df, columns):
    for col in columns:
        if df[col].dtype in ["int64", "float64"]:  
            Q1 = df[col].quantile(0.25)
            Q3 = df[col].quantile(0.75)
            IQR = Q3 - Q1
            lower_bound = Q1 - 1.5 * IQR
            upper_bound = Q3 + 1.5 * IQR
            df = df[(df[col] >= lower_bound) & (df[col] <= upper_bound)]
    return df
→ Ссылка