es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener el conteo de valores en una columna de un DataFrame de Pandas dentro de grupos?

Tengo un DataFrame con una estructura como esta:

df = pd.DataFrame({
        'id': ['123', '123', '123', '456', '456', '789'],
        'type': ['A', 'A', 'B', 'B', 'C', 'A']
     })

¿Cómo puedo obtener una cuenta de cada tipo agrupado por el campo ‘id’ y crear una nueva columna para cada tipo único?

El DataFrame resultante que busco se vería así:

df = pd.DataFrame({
        'id': ['123', '456', '789'],
        'A': [2, 0, 1],
        'B': [1, 1, 0],
        'C': [0, 1, 0]
    })

Gracias por cualquier ayuda y guía.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para obtener un recuento de cada tipo agrupado por “id” y crear una nueva columna para cada tipo único, podemos hacer uso de las funciones “groupby” y “pivot_table” de pandas.

    # Agrupar el DataFrame por 'id' y 'type', luego contar las ocurrencias de cada combinación
    grouped = df.groupby(['id', 'type']).size().reset_index(name='count')
    
    # Pivotear la tabla para crear una nueva columna para cada tipo único
    pivoted = grouped.pivot_table(index='id', columns='type', values='count', fill_value=0)
    
    # Resetear el índice para obtener 'id' como una columna
    result = pivoted.reset_index()
    

    El DataFrame resultante se vería así:

       id  A  B  C
    0  123  2  1  0
    1  456  0  1  1
    2  789  1  0  0
    

    Explicación:

    1. Primero agrupamos el DataFrame de entrada “df” por ‘id’ y ‘type’, luego contamos las ocurrencias de cada combinación utilizando el método “size”. El DataFrame resultante “grouped” se vería así:
        id  type  count
    0  123     A      2
    1  123     B      1
    2  456     B      1
    3  456     C      1
    4  789     A      1
    
    1. Pivotamos la tabla utilizando “pivot_table” con “id” como índice, ‘type’ como columnas y ‘count’ como valores. El parámetro “fill_value” se utiliza para reemplazar cualquier valor faltante con 0. El DataFrame resultante “pivoted” se vería así:
    type  A  B  C
    id           
    123   2  1  0
    456   0  1  1
    789   1  0  0
    
    1. Finalmente, reseteamos el índice de “pivoted” para obtener ‘id’ como una columna y asignamos el resultado a “result”.

Comments are closed.