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