Удалите значения низкой частоты из pandas.dataframe

Как удалить значения из столбца в pandas.DataFrame , который встречается редко, т.е. с низкой частотой? Пример:

 In [4]: df[col_1].value_counts() Out[4]: 0 189096 1 110500 2 77218 3 61372 ... 2065 1 2067 1 1569 1 dtype: int64 

Итак, мой вопрос: как удалить такие значения, как 2065, 2067, 1569 и другие? И как я могу это сделать для ВСЕХ столбцов, которые содержат .value_counts() как это?

ОБНОВЛЕНИЕ: О «низком» я имею в виду такие значения, как 2065 . Это значение возникает в col_1 1 (один) раз, и я хочу удалить такие значения.

  • Почему я получаю «python int too large to convert to C long», когда я использую DateFormatter от matplotlib для форматирования дат на оси x?
  • Как сделать «боковой вид взрыва ()» в пандах
  • Создание группы в области данных в пандах
  • Удалить имя индекса в пандах
  • Как избежать научной нотации при аннотации морской карты кластера?
  • Pandas: преобразование в числовое, создание NaN при необходимости
  • Создайте и установите элемент Pandas DataFrame в список
  • python / pandas: как объединить два фрейма данных в один с иерархическим индексом столбца?
  • 2 Solutions collect form web for “Удалите значения низкой частоты из pandas.dataframe”

    Я вижу, что вы можете сделать это двумя способами.

    Для всего DataFrame

    Этот метод удаляет значения, которые происходят нечасто во всем DataFrame. Мы можем делать это без циклов, используя встроенные функции для ускорения работы.

     import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0, high=9, size=(100,2)), columns = ['A', 'B']) threshold = 10 # Anything that occurs less than this will be removed. value_counts = df.stack().value_counts() # Entire DataFrame to_remove = value_counts[value_counts <= threshold].index df.replace(to_remove, np.nan, inplace=True) 

    Колонка-на-колонки

    Этот метод удаляет записи, которые встречаются нечасто в каждом столбце.

     import pandas as np import numpy as np df = pd.DataFrame(np.random.randint(0, high=9, size=(100,2)), columns = ['A', 'B']) threshold = 10 # Anything that occurs less than this will be removed. for col in df.columns: value_counts = df[col].value_counts() # Specific column to_remove = value_counts[value_counts <= threshold].index df[col].replace(to_remove, np.nan, inplace=True) 

    Вероятно, вы не хотите удалять всю строку в вашем DataFrame, если только один столбец имеет значения ниже вашего порогового значения, поэтому я просто удалил эти точки данных и заменил их на None .

    Я value_counts каждый столбец и выполняю значение value_counts для каждого. Затем я получаю значения индекса для каждого элемента, который встречается на целевых пороговых значениях или ниже их. Наконец, я использую .loc чтобы найти эти значения элементов в столбце, а затем заменить их на None .

     df = pd.DataFrame({'A': ['a', 'b', 'b', 'c', 'c'], 'B': ['a', 'a', 'b', 'c', 'c'], 'C': ['a', 'a', 'b', 'b', 'c']}) >>> df ABC 0 aaa 1 baa 2 bbb 3 ccb 4 ccc threshold = 1 # Remove items less than or equal to threshold for col in df: vc = df[col].value_counts() vals_to_remove = vc[vc <= threshold].index.values df[col].loc[df[col].isin(vals_to_remove)] = None >>> df ABC 0 None aa 1 baa 2 b None b 3 ccb 4 cc None 
    Python - лучший язык программирования в мире.