Tengo un marco de datos df
y uso varias columnas para groupby
:
df['col1','col2','col3','col4'].groupby(['col1','col2']).mean()
De la manera anterior, casi obtengo la tabla (marco de datos) que necesito. Lo que falta es una columna adicional que contenga el número de filas en cada grupo. En otras palabras, quiero decir, pero también me gustaría saber cuántos números se usaron para obtener estos medios. Por ejemplo, en el primer grupo hay 8 valores y en el segundo 10 y así sucesivamente.
En pocas palabras: ¿Cómo llego grupos sabia estadísticas de una trama de datos?
df[['col1','col2','col3','col4']].groupby(['col1','col2']).agg(['mean', 'count'])
count
columna por grupo.result = df['col1','col2','col3','col4'].groupby(['col1', 'col2']).mean() ; counts = times.groupby(['col1', 'col2']).size() ; result['count'] = counts
Respuesta rápida:
La forma más sencilla de obtener recuentos de filas por grupo es llamando
.size()
, lo que devuelve unSeries
:Por lo general, desea este resultado como un
DataFrame
(en lugar de aSeries
) para que pueda hacer:Si desea averiguar cómo calcular los recuentos de filas y otras estadísticas para cada grupo, continúe leyendo a continuación.
Ejemplo detallado:
Considere el siguiente marco de datos de ejemplo:
Primero usemos
.size()
para obtener los recuentos de filas:Luego, usemos
.size().reset_index(name='counts')
para obtener los recuentos de filas:Incluyendo resultados para más estadísticas
Cuando desea calcular estadísticas sobre datos agrupados, generalmente se ve así:
El resultado anterior es un poco molesto de tratar debido a las etiquetas de columna anidadas y también porque los recuentos de filas son por columna.
Para obtener más control sobre la salida, generalmente divido las estadísticas en agregaciones individuales que luego combino usando
join
. Se parece a esto:Notas al pie
El código utilizado para generar los datos de prueba se muestra a continuación:
Descargo de responsabilidad:
Si algunas de las columnas que está agregando tienen valores nulos, entonces realmente desea ver la fila del grupo que cuenta como una agregación independiente para cada columna. De lo contrario, es posible que se equivoque sobre cuántos registros se están utilizando realmente para calcular cosas como la media porque los pandas dejarán caer
NaN
entradas en el cálculo de la media sin informarle al respecto.fuente
In [5]: counts_df = pd.DataFrame(df.groupby('col1').size().rename('counts'))
tal vez sea mejor establecer el tamaño () como una nueva columna si desea manipular el marco de datos para un análisis posterior, que debería sercounts_df = pd.DataFrame(df.groupby('col1').size().reset_index(name='counts')
isnull
a esta consulta para tenerla también en una columna?'col4': ['median', 'min', 'count', 'isnull']
Una función para gobernarlos a todos:
GroupBy.describe
Retornos
count
,mean
,std
, y otras estadísticas útiles por grupo.Para obtener estadísticas específicas, solo selecciónelas,
describe
funciona para varias columnas (cambiar['C']
a['C', 'D']
—o elimínelo por completo— y vea qué sucede, el resultado es un marco de datos con columnas MultiIndexed).También obtienes estadísticas diferentes para datos de cadena. Aquí hay un ejemplo,
Para más información, consulte la documentación .
fuente
Podemos hacerlo fácilmente usando groupby y count. Pero, debemos recordar usar reset_index ().
fuente
Para obtener múltiples estadísticas, contraiga el índice y conserve los nombres de columna:
Produce:
fuente
Cree un objeto de grupo y llame a métodos como el siguiente ejemplo:
fuente
Por favor intente este código
Creo que ese código agregará una columna llamada 'cuenta' que cuenta de cada grupo
fuente