dataframe pandas eliminar filas con baja frecuencia

¿Cuál es la mejor práctica para eliminar todas las filas que tienen una columna con un valor de baja frecuencia?

Marco de datos:

IN: foo bar poo 1 a A 2 a A 3 a B 4 b B 5 b A 6 b A 7 c C 8 d B 9 e B 

Ejemplo 1: elimine todas las filas que tengan menos de 3 en el valor de frecuencia en la columna ‘poo’:

 OUT: foo bar poo 1 a A 2 a A 3 a B 4 b B 5 b A 6 b A 8 d B 9 e B 

Ejemplo 2: elimine todas las filas que tengan menos de 3 en el valor de frecuencia en la columna ‘barra’:

 OUT: foo bar poo 1 a A 2 a A 3 a B 4 b B 5 b A 6 b A 

Esto debería generalizarse con bastante facilidad. Necesitará groupby + transform + count , y luego filtre el resultado:

 col = 'poo' # 'bar' n = 3 # 2 df[df.groupby(col)[col].transform('count').ge(n)] foo bar poo 0 1 a A 1 2 a A 2 3 a B 3 4 b B 4 5 b A 5 6 b A 7 8 d B 8 9 e B 

Filtro IIUC.

 df.groupby('poo').filter(lambda x : (x['poo'].count()>=3).any()) Out[81]: foo bar poo 0 1 a A 1 2 a A 2 3 a B 3 4 b B 4 5 b A 5 6 b A 7 8 d B 8 9 e B 

O combina value_counts con value_counts

 s=df.poo.value_counts().gt(3) df.loc[df.poo.isin(s[s].index)] Out[89]: foo bar poo 0 1 a A 1 2 a A 2 3 a B 3 4 b B 4 5 b A 5 6 b A 7 8 d B 8 9 e B