Поиск столбцов с менее чем 3 дублированиями каждого категориального значения в фрейме данных python

#python #dataframe #for-loop #duplicates

#python #фрейм данных #for-цикл #дубликаты

Вопрос:

По сути, я пытаюсь найти категориальные столбцы, которые имеют менее 3 дублирований каждого класса. Например, на прилагаемом скриншоте у меня есть столбец с именем Name, «Тип 1«, и я хочу, чтобы имена этих столбцов возвращались в моем выводе, если каждая категория в этих столбцах (скажем, Bulbasaur, Nidoino) присутствует <3 раз, и причина, по которой я хочу это выполнить, заключается в такомслучаи, когда столбец в основном имеет уникальные значения, я могу пометить их кодированием.

Ниже приведен код, который я опробовал, но я не нахожу решения.

Может кто-нибудь, пожалуйста, помочь?

 labels = [str(Training_data[object_cols].unique()[i]) for i in range(Training_data[object_cols].nunique())]
values = [Training_data[object_cols].value_counts()[i] for i in range(Training_data[object_cols].nunique())]
labels
values
Target_dis = pd.DataFrame((labels, values))
Target_dis = Target_dis.T
Target_dis.columns = ['Labels', 'Counts']
Target_dis = Target_dis.sort_values('Counts', ascending=False)
Target_dis
  

введите описание изображения здесь

Ответ №1:

Вы можете использовать этот value_counts метод для своих столбцов:

 Target_dis['Name'].value_counts()
  

Ответ №2:

Я не совсем уверен, чего вы хотите, и почему вы должны кодировать метки. Итак, я добавил ниже некоторый код, который выводит для каждого столбца, сколько раз встречается наиболее распространенное значение.

 import pandas as pd

df = pd.DataFrame({
    'Name': ['Bulbasaur', 'Bulbasaur', 'Nidorino', 'Nidoking', 'Clefairy', 'Clefable', 
             'Vulpix', 'Ninetales', 'Jigglypuff'],
    'Type 1': ['Grass', 'Grass', 'Grass', 'Grass', 'Fire', 'Fire', 'Fire', 'Fire', 'Fire'],
    'Type 2': ['Poison', 'Poison', 'Poison', 'Poison', '', '', 'Flying', 'Dragon', 'Flying'],
    'Total': [318, 405, 525, 625, 309, 405, 534, 634, 634],
    'HP': [45, 60, 80, 80, 39, 58, 78, 78, 78],
    'Attack': [49, 62, 82, 100, 52, 64, 84, 130, 104],
})

for col in df:
    max_count = df[col].value_counts().max()
    print(f"Values in column '{col}' are repeated at most {max_count} times.")
  
 Values in column 'Name' are repeated at most 2 times.
Values in column 'Type 1' are repeated at most 5 times.
Values in column 'Type 2' are repeated at most 4 times.
Values in column 'Total' are repeated at most 2 times.
Values in column 'HP' are repeated at most 3 times.
Values in column 'Attack' are repeated at most 1 times.