Creo que esta es una pregunta bastante básica, pero parece que no puedo encontrar la solución.
Tengo un marco de datos de pandas similar al siguiente:
import pandas as pd df = pd.DataFrame({'A' : ['x','x','y','z','z'], 'B' : ['p','p','q','r','r']}) dfque crea una tabla como esta:
AB 0 xp 1 xp 2 yq 3 zr 4 zrEstoy tratando de crear una tabla que represente la cantidad de valores distintos en ese marco de datos. Así que mi objetivo es algo como esto:
AB c 0 xp 2 1 yq 1 2 zr 2Sin embargo, no puedo encontrar las funciones correctas para lograr esto. He intentado:
df.groupby(['A','B']).agg('count')Esto produce una tabla con 3 filas (como se esperaba) pero sin una columna de 'recuento'. No sé cómo agregar en esa columna de conteo. ¿Podría alguien señalarme en la dirección correcta?
Puedes usar size
df.groupby(['A','B']).size() Out[590]: AB xp 2 yq 1 zr 2 dtype: int64Para su solución agregando una de las columnas.
df.groupby(['A','B']).B.agg('count') Out[591]: AB xp 2 yq 1 zr 2 Name: B, dtype: int64Actualizar :
df.groupby(['A','B']).B.agg('count').to_frame('c').reset_index() #df.groupby(['A','B']).size().to_frame('c').reset_index() Out[593]: AB c 0 xp 2 1 yq 1 2 zr 2DataFrame.value_counts Este es un reemplazo idéntico para df.groupby(['A', 'B']).size() .
df.value_counts(['A', 'B']) AB zr 2 xp 2 yq 1 dtype: int64 df.value_counts(['A', 'B']).reset_index(name='c') AB c 0 zr 2 1 xp 2 2 yq 1