• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

192
Vistas
python ¿Cómo transponer el recuento de valores en un marco de datos de pandas a varias columnas en un segundo marco de datos?

Tengo 2 marcos de datos df1 y df2.

 import pandas as pd df1 = pd.DataFrame({ 'id':['1','1','1','2','2','2', '3', '4','4', '5', '6', '7'], 'group':['A','A','B', 'A', 'A', 'C', 'A', 'A', 'B', 'B', 'A', 'C'] }) df2 = pd.DataFrame({ 'id':['1','2','3','4','5','6','7'] })

Quiero agregar 3 columnas a df2 llamadas group_A, group_B y group_C, donde cada una cuenta el número de repeticiones de cada grupo en df1 según la columna de identificación. entonces el resultado de df2 debería ser así:

Salida de ejemplo

about 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Use la tabulación crosstab con DataFrame.join , el tipo de ambos id tiene que ser el mismo, como aquí las cadenas:

 print (pd.crosstab(df1['id'], df1['group']).add_prefix('group_')) group group_A group_B group_C id 1 2 1 0 2 2 0 1 3 1 0 0 4 1 1 0 5 0 1 0 6 1 0 0 7 0 0 1 df = df2.join(pd.crosstab(df1['id'], df1['group']).add_prefix('group_'), on='id') print (df) id group_A group_B group_C 0 1 2 1 0 1 2 2 0 1 2 3 1 0 0 3 4 1 1 0 4 5 0 1 0 5 6 1 0 0 6 7 0 0 1

La solución sin unión es posible, si los mismos id s en ambos DataFrame s:

 print (pd.crosstab(df1['id'], df1['group']).add_prefix('group_').reset_index().rename_axis(None, axis=1)) id group_A group_B group_C 0 1 2 1 0 1 2 2 0 1 2 3 1 0 0 3 4 1 1 0 4 5 0 1 0 5 6 1 0 0 6 7 0 0 1
about 3 years ago · Santiago Trujillo Denunciar

0

Una opción es obtener los recuentos de df2 antes de unirse a df1:

 counts = df1.value_counts().unstack(fill_value=0).add_prefix('group_') df2.join(counts, on='id') id group_A group_B group_C 0 1 2 1 0 1 2 2 0 1 2 3 1 0 0 3 4 1 1 0 4 5 0 1 0 5 6 1 0 0 6 7 0 0 1

Otra opción es con get_dummies , combinado con groupby :

 counts = pd.get_dummies(df1, columns = ['group']).groupby('id').sum() df2.join(counts, on='id') id group_A group_B group_C 0 1 2 1 0 1 2 2 0 1 2 3 1 0 0 3 4 1 1 0 4 5 0 1 0 5 6 1 0 0 6 7 0 0 1
about 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda