Estoy creando un objeto groupby
partir de un DataFrame
Pandas y quiero seleccionar todos los grupos con> 1 tamaño.
Lo siguiente no parece funcionar:
grouped[grouped.size > 1 ]
Además, ¿cómo se puede filtrar ciertos valores de un DataFrame
agrupado? Por ejemplo, ¿cómo podría eliminar todas las filas del grupo donde la columna 'name'
tiene un valor 'foo'
o 'bar'
?
Ejemplo elaborado
df = pandas.DataFrame({'A': ['foo','bar','foo','foo'], 'B': range(4)}) grouped = df.groupby('A')
Necesito el objeto groupby
después de eliminar los grupos que tienen un tamaño de grupo <= 1.
Intenté lo siguiente, que no funcionó:
grouped[grouped.size() > 1]
Esperaba:
A foo 0 2 3
No estoy seguro de cómo funciona la indexación / segmentación para el objeto grouped
.
A partir de los pandas 0.12 puedes hacer:
>>> grouped.filter(lambda x: len(x) > 1) AB 0 foo 0 2 foo 2 3 foo 3
Si todavía necesita una solución:
In [49]: pd.concat([group for _, group in grouped if len(group) > 1]) Out[49]: AB 0 foo 0 2 foo 2 3 foo 3
He encontrado que la transform
es mucho más eficiente que el filter
para marcos de datos muy grandes:
element_group_sizes = df['A'].groupby(df['A']).transform('size') df[element_group_sizes>1]
O, en una línea:
df[df['A'].groupby(df['A']).transform('size')>1]