Как сгруппировать переменные по тому, сколько раз они появляются в столбце? - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь запустить регрессию в Python, используя несколько категориальных переменных. Я подумал о том, чтобы превратить их в манекены. Однако здесь у меня проблема. В столбце, с которым я работаю, есть несколько категорий, которые часто повторяются, а другие - нет. Если я применю фиктивное преобразование, я получу примерно 5000 пустышек. Поэтому я подумал о том, чтобы сгруппировать категории, которые появляются всего несколько раз. Как я могу это сделать? Например, если у вас категория 1 встречается 2000 раз, категория 2 появляется 3000 раз, а категории 4, 5 и 6 появляются по 30 раз каждая, категория 7 появляется 10 раз, а категория 8 - 5 раз. Как я могу сгруппировать категории 4, 5, 6, 7 и 8? Сделайте что-нибудь вроде: если категория появляется меньше X раз, сгруппируйте их. Результатом должны быть группа 1, группа 2, group_x и group_x должны иметь переменные, которые появляются меньше указанного c количества раз.

1 Ответ

1 голос
/ 06 мая 2020

Это относительно просто сделать с помощью модуля pandas. Представьте, что df содержит ваш столбец с категориальным:

import pandas as pd
df = pd.DataFrame({ 'x':['a','b','c','a','b','a','d','e','f']})

Вы можете просто подсчитать значения внутри:

cnt = df.x.value_counts()

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

df['group'] = df['x'].apply( lambda x: cnt[x] if cnt[x] >= 2 else 0  )

Вы можете изменить значение 2 на любой порог, ниже которого все категории будут в одной группе. Наконец, создайте фиктивные переменные вроде этого:

dummies = pd.get_dummies(df['group'])

Предполагая, что вам нужны те же категории подсчета (особенно с малым количеством) до go в одинаковых фиктивных переменных.

...