Работа с редкими категориями в Pandas - замените все, что не в верхних категориях, на «Другое» - PullRequest
0 голосов
/ 05 октября 2018

При очистке данных я часто сталкиваюсь со следующей распространенной проблемой: есть несколько более общих категорий (скажем, топ-10 жанров фильмов), а также множество других, которых мало.Обычная практика здесь заключается в объединении разреженных жанров, например, в «Другое».

Легко сделать, когда не так много разреженных категорий:

# Join bungalows as they are sparse classes into 1
df.property_type.replace(['Terraced bungalow','Detached bungalow', 'Semi-detached bungalow'], 'Bungalow', inplace=True)

, но если, например, у меня есть набор данных фильмовс большинством фильмов, созданных, скажем, 8 большими студиями, и я хотел бы объединить все остальное в «другой» студии, имеет смысл получить топ 8 студий:

top_8_list = []
top_8 = df.studio.value_counts().head(8)
for key, value in top_8.iteritems():
    top_8_list.append(key)

top_8_list
top_8_list
['Universal Pictures',
 'Warner Bros.',
 'Paramount Pictures',
 'Twentieth Century Fox Film Corporation',
 'New Line Cinema',
 'Columbia Pictures Corporation',
 'Touchstone Pictures',
 'Columbia Pictures']

, а затем сделать что-то вроде

заменить студию, в которой студия не входит в топ-8, на "прочее"

, поэтому вопрос, если кто-нибудь знает какое-нибудь элегантное решение для панд для этого?Это очень распространенная задача очистки данных

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете использовать pd.DataFrame.loc с логическим индексированием:

df.loc[~df['studio'].isin(top_8_list), 'studio'] = 'Other'

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

top_8_list = df['studio'].value_counts().index[:8]
0 голосов
/ 05 октября 2018

Вы можете преобразовать столбец в тип Categorical, который добавляет преимущества памяти:

top_cats = df.studio.value_counts().head(8).index.tolist() + ['other']
df['studio'] = pd.Categorical(df['studio'], categories=top_cats).fillna('other')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...