Фильтрация таблицы по условиям
Имеется следующая таблица
df = pd.DataFrame({'class1': ['a', 'b', 'c', 'a', 'a', 'c', 'a'],
'class2': ['y', 'x', 'z', 'w', 'y', 'x', 'z']})
df
необходимо удалить строки, если выполняется хотя бы одно из этих условий:
df['class1'].value_counts().loc[lambda x: x < 2]
df['class2'].value_counts().loc[lambda x: x < 2]
Oжидаемый результат
res = pd.DataFrame({'class1': ['a', 'c', 'a', 'c', 'a'],
'class2': ['y', 'z', 'y', 'x', 'z']})
res
Ответы (2 шт):
Автор решения: CrazyElf
→ Ссылка
Ну вот прямо "в лоб" решение. Возможно, можно и как-то короче записать было бы:
i1 = df['class1'].value_counts().loc[lambda x: x < 2].index
i2 = df['class2'].value_counts().loc[lambda x: x < 2].index
res = df.loc[~((df['class1'].isin(i1)) | (df['class2'].isin(i2)))]
res
Вывод:
class1 class2
0 a y
2 c z
4 a y
5 c x
6 a z
Автор решения: D.Vinogradov
→ Ссылка
Как вариант:
df = pd.DataFrame({'class1': ['a', 'b', 'c', 'a', 'a', 'c', 'a'],
'class2': ['y', 'x', 'z', 'w', 'y', 'x', 'z']})
cols = ['class1', 'class2']
res = df[df[cols].replace(df[cols].stack().value_counts()).gt(1).all(1)]
>>> res
class1 class2
0 a y
2 c z
4 a y
5 c x
6 a z