Отображение столбца данных в панде в словарь - PullRequest
0 голосов
/ 07 ноября 2018

У меня есть случай с кадром данных, содержащим категориальную переменную высокой мощности (много уникальных значений). Я хотел бы перекодировать эту переменную в набор значений (наиболее часто встречающиеся значения) и заменить все остальные значения категорией «все» («другие»). Чтобы привести простой пример:

Вот два значения, которые должны остаться неизменными:

top_values = ['apple', 'orange']

Я установил их на основе их частоты в следующем столбце данных:

{'fruits': {0: 'apple',
1: 'apple',
2: 'orange',
3: 'orange',
4: 'banana',
5: 'grape'}}

Этот столбец данных следует перекодировать следующим образом:

{'fruits': {0: 'apple',
1: 'apple',
2: 'orange',
3: 'orange',
4: 'other',
5: 'other'}}

Как это сделать? (Фрейм данных имеет миллионы записей)

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018
df.newCol = df.apply(lambda row: row.fruits if row.fruits in top_values else 'others' )
0 голосов
/ 07 ноября 2018

Существует как минимум пара методов, которые вы можете использовать:

where + логическое индексирование

df['fruits'].where(df['fruits'].isin(top_values), 'other', inplace=True)

loc + логическое индексирование

df.loc[~df['fruits'].isin(top_values), 'fruits'] = 'other'

После этого процесса вы, вероятно, захотите превратить свою серию в категориальную:

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

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

...