Sé libre de compartir nuestra web y códigos en tus redes, danos de tu ayuda para hacer crecer esta comunidad.
Solución:
Convierta su serie en categórica, extraiga categorías cuyos recuentos no estén entre los 3 primeros, agregue una nueva categoría, por ejemplo 'Other'
luego reemplace las categorías calculadas previamente:
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)
Nota: Es tentador para combinar categorías renombrándolas mediante df['Jobrol'].cat.rename_categories(dict.fromkeys(others, label))
pero esto no funcionará porque implicará varias categorías etiquetadas de forma idéntica, lo que no es posible.
La solución anterior se puede adaptar para filtrar por contar. Por ejemplo, para incluir solo categorías con un recuento de 1, puede definir others
como tal:
counts = df['Jobrol'].value_counts()
others = counts[counts == 1].index
Utilizar value_counts
con 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
Otra solución:
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