Digamos que tengo el marco de datos de Pandas con columnas de diferentes atributos de medición y valores de medición correspondientes.
ID Parameter Value 0 'A' 4.3 1 'B' 3.1 2 'C' 8.9 3 'A' 2.1 4 'A' 3.9 . . . . . . . . . 100 'B' 3.8¿Cómo puedo filtrar este marco de datos para que solo tenga mediciones que aparezcan más de X veces? Por ejemplo, para este marco de datos quiero obtener todas las filas con más de 5 medidas (digamos que solo los parámetros 'A' y 'B' aparecen más de 5 veces) para obtener un marco de datos como el siguiente.
ID Parameter Value 0 'A' 4.3 1 'B' 3.1 3 'A' 2.1 . . . . . . . . . 100 'B' 3.8Puedes usar value_counts + isin -
v = df.Parameter.value_counts() df[df.Parameter.isin(v.index[v.gt(5)])] Por ejemplo, donde K = 2 (obtener todos los elementos que tienen más de 2 lecturas) -
df ID Parameter Value 0 0 A 4.3 1 1 B 3.1 2 2 C 8.9 3 3 A 2.1 4 4 A 3.9 5 5 B 4.5 v = df.Parameter.value_counts() v A 3 B 2 C 1 Name: Parameter, dtype: int64 df[df.Parameter.isin(v.index[v.gt(2)])] ID Parameter Value 0 0 A 4.3 3 3 A 2.1 4 4 A 3.9Use transform + size con boolean indexing :
df[df.groupby('Parameter')['Parameter'].transform('size') > 5]Mediante el uso de filter
df.groupby('Parameter').filter(lambda x : x['Parameter'].shape[0]>=5)