Переименуйте менее часто используемые категории с помощью «ДРУГОГО» питона - PullRequest
0 голосов
/ 06 декабря 2018

В моем фрейме данных есть несколько категориальных столбцов с более чем 100 различными категориями.Я хочу ранжировать категории наиболее часто.Я сохраняю первые 9 наиболее часто встречающихся категорий, а менее часто встречающиеся категории переименовываю их автоматически:3 категории, тогда я переименую остальные в «ДРУГОЕ», как мне поступить?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Использование value_counts с numpy.where:

need = df['Jobrol'].value_counts().index[:3]
df['Jobrol'] = np.where(df['Jobrol'].isin(need), df['Jobrol'], 'OTHER')

valCount = df['Jobrol'].value_counts()
print (valCount)
Research Scientist       7
Sales Executive          7
Laboratory Technician    5
OTHER                    2
Name: Jobrol, dtype: int64

Другое решение:

N = 3
s = df['Jobrol'].value_counts()
valCount = s.iloc[:N].append(pd.Series(s.iloc[N:].sum(), index=['OTHER']))
print (valCount)
Research Scientist       7
Sales Executive          7
Laboratory Technician    5
OTHER                    2
dtype: int64
0 голосов
/ 06 декабря 2018

Преобразуйте ваши серии в категориальные, извлеките категории, количество которых не входит в верхние 3, добавьте новую категорию, например, 'Other', а затем замените ранее вычисленные категории:

df['Jobrol'] = df['Jobrol'].astype('category')

others = df['Jobrol'].value_counts().index[3:]
label = 'Other'

df['Jobrol'] = df['Jobrol'].cat.add_categories([label])
df['Jobrol'] = df['Jobrol'].replace(others, label)

Примечание: Это заманчиво объединить категории, переименовав их с помощью df['Jobrol'].cat.rename_categories(dict.fromkeys(others, label)), но это не сработает, так как это подразумевает несколько идентично маркированных категорий, что невозможно.


Приведенное выше решение может быть адаптировано для фильтрации по count .Например, чтобы включить только категории со счетом 1, вы можете определить others следующим образом:

counts = df['Jobrol'].value_counts()
others = counts[counts == 1].index
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...