Python: combinación de factores de baja frecuencia / recuentos de categorías

Hay una gran solución en R.

Mi df.column ve como:

 Windows Windows Mac Mac Mac Linux Windows ... 

Quiero reemplazar las categorías de baja frecuencia con ‘Otro’ en este vector df.column . Por ejemplo, necesito que mi df.column vea como

 Windows Windows Mac Mac Mac Linux -> Other Windows ... 

Me gustaría cambiar el nombre de estas categorías raras para reducir el número de factores en mi regresión. Por eso necesito el vector original. En Python, después de ejecutar el comando para obtener la tabla de frecuencias, obtengo:

 pd.value_counts(df.column) Windows 26083 iOS 19711 Android 13077 Macintosh 5799 Chrome OS 347 Linux 285 Windows Phone 167 (not set) 22 BlackBerry 11 

Me pregunto si hay un método para cambiar el nombre de ‘Chrome OS’, ‘Linux’ (datos de baja frecuencia) a otra categoría (por ejemplo, categoría ‘Otro’, y hacerlo de manera eficiente).

Máscara al encontrar el porcentaje de ocupación, es decir:

 series = pd.value_counts(df.column) mask = (series/series.sum() * 100).lt(1) # To replace df['column'] use np.where Ie df['column'] = np.where(df['column'].isin(series[mask].index),'Other',df['column']) 

Para cambiar el índice con la sum:

 new = series[~mask] new['Other'] = series[mask].sum() Windows 26083 iOS 19711 Android 13077 Macintosh 5799 Other 832 Name: 1, dtype: int64 

Si desea reemplazar el índice entonces:

 series.index = np.where(series.index.isin(series[mask].index),'Other',series.index) Windows 26083 iOS 19711 Android 13077 Macintosh 5799 Other 347 Other 285 Other 167 Other 22 Other 11 Name: 1, dtype: int64 

Explicación

 (series/series.sum() * 100) # This will give you the percentage ie Windows 39.820158 iOS 30.092211 Android 19.964276 Macintosh 8.853165 Chrome OS 0.529755 Linux 0.435101 Windows Phone 0.254954 (not set) 0.033587 BlackBerry 0.016793 Name: 1, dtype: float64 

.lt(1) es equivalente a menor que 1. Eso le da una máscara booleana, basada en ese índice de máscara y asigna los datos