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.

Último miembro de cada elemento de una lista de índices de identificación en un conjunto de datos relacionales.

Supongamos que tengo dos conjuntos de datos en python: households (hogares) y people (individuos). Una clave o identificación (int64) conecta un hogar con uno o más individuos. Quiero crear una variable binaria llamada “last_member” que tome un valor de 0 si hay más individuos en el mismo hogar y 1 si este individuo es el último miembro del hogar.

Un ejemplo trivial sería el siguiente:

last_member id …
0 1 …
0 1 …
1 1 …
1 2 …
0 3 …
1 3 …

Puedo obtener el número de identificaciones únicas del conjunto de datos households o del propio conjunto de datos individuals.

Tengo la sensación de que tanto la función “where” de numpy como “aggregate” de pandas son fuertes candidatos para encontrar una solución así. Aun así, no puedo entender una solución eficiente que no implique, digamos, recorrer la lista de índices.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una posible solución utilizando pandas:

    import pandas as pd
    
    # Suponiendo que 'id' es la clave que conecta los dataframes de hogares y personas
    
    # Crear un dataframe con el recuento de individuos por hogar
    counts = people.groupby('id').size().reset_index(name='count')
    
    # Fusionar el dataframe de recuentos con el dataframe de hogares
    merged = pd.merge(households, counts, on='id')
    
    # Crear una variable binaria basada en la columna count
    merged['last_member'] = (merged['count'] == 1).astype(int)
    
    # Eliminar la columna count si no es necesaria
    merged.drop('count', axis=1, inplace=True)
    

    Esta solución utiliza la función groupby de pandas para contar el número de individuos por hogar y fusionar el resultado con el dataframe de hogares. Luego, crea una variable binaria llamada “last_member” basada en la columna count, donde 1 indica el último miembro y 0 indica que hay más miembros en el mismo hogar. Finalmente, elimina la columna count si no es necesaria. Esta solución debería ser eficiente y escalable incluso para conjuntos de datos grandes.

Comments are closed.