Я хочу выполнить задачу разделения, но для этого требуется минимальное количество выборок на класс, поэтому я хочу отфильтровать Dataframe по столбцу, который идентифицирует метки классов. Если частота появления класса ниже некоторого порога, то мы хотим отфильтровать это.
>>> df = pd.DataFrame([[1,2,3], [4,5,6], [0,0,6]])
>>> df
0 1 2
0 1 2 3
1 4 5 6
2 0 0 6
>>> filter_on_col(df, col=2, threshold=6) # Removes first row
0 1 2
0 4 5 6
1 0 0 6
Я могу сделать что-то вроде df[2].value_counts()
, чтобы получить частоту каждого значения в столбце 2
, и затем я могу выяснить, какие значения превышают мое пороговое значение просто:
>>>`df[2].value_counts() > 2`
3 False
6 True
и тогда логика выяснения всего остального довольно проста.
Но я чувствую, что здесь есть элегантный однострочный панд, который я могу сделать, или, возможно, более эффективный метод.
Мой вопрос очень похож на: Выбор строк в DataFrame на основе значений в столбце в пандах , но сложность заключается в том, что я полагаюсь на частоту значений, а не на сами значения.