Pandas условные обозначения: изменение имени значения, если pd.value_counts меньше чем-то - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть эта таблица с моделями df ['model'] и

pd.value_counts(df2['model'].values, sort=True)

возвращает это:

'''
MONSTER        331
MULTISTRADA    134
HYPERMOTARD     69
SCRAMBLER       63
SUPERSPORT      31
              ... 
900              1
T-MAX            1
FC               1
GTS              1
SCOUT            1
Length: 75, dtype: int64
'''

Я хочу переименовать все значения в df2 ['model'] с количеством <5 в 'OTHER'. Пожалуйста, кто-нибудь может мне помочь, как go об этом? </p>

Ответы [ 2 ]

0 голосов
/ 13 марта 2020

Я подозреваю, что это совсем не элегантно или pythoni c, но в итоге это сработало:

df_pooled_other = df_final.assign(freq=df_final.groupby('model name')['model name'].transform('count'))\
  .sort_values(by=['freq','model name', 'Age in months_x_x'],ascending=[False,True, True])

df_pooled_other['model name'] = np.where(df_pooled_other['freq'] <= 5, 'Other', df_pooled_other['model name'])

0 голосов
/ 19 февраля 2020

Сначала вы можете получить список категорий, которые вы хотите изменить на другие, с помощью первой строки кода. Он берет вашу функцию и выбирает строки, которые удовлетворяют желаемому условию (в данном случае менее 5 случаев).

Затем вы выбираете фрейм данных и просто выбираете строки, ячейка модели которых находится в списке категорий, которые вы хочу заменить и изменить значение te на «ДРУГОЕ».

other_classes = data['model'].value_counts()[data['model'].value_counts() < 5].index

data['model'][data['model'].isin(other_classes)] = 'OTHER'

Надеюсь, это поможет

...