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.

Crear intervalo de años y extraer valor repetido

Tengo una tabla similar a esta:

Nombre Año
Nombre1 1950
Nombre2 1951
Nombre3 1952
Nombre4 1953
…… ….
Nombre7 2019
Nombre8 2020
Nombre9 2021

Y tengo que extraer el nombre que se repite en todas las décadas (cada 10 años) desde la fecha mínima hasta la fecha máxima.

Estoy intentando hacer un groupby, pero no logro obtener el resultado que quiero.

El groupby es el siguiente:

data.groupby('Año').Nombre.nunique().reset_index()

El problema es que este groupby agrupa los años de manera individual y quiero extraer los nombres de las personas que se repiten cada 10 años.

¿Cuál podría ser la forma de extraer esta información?

Gracias.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para extraer los nombres de las personas que se repiten cada 10 años, puedes agrupar los datos por década en lugar de por año. Puedes lograr esto creando una nueva columna utilizando el operador de división de suelo // para dividir el año por 10 y luego multiplicarlo por 10, redondeando efectivamente el año hacia abajo a la década más cercana. Luego, puedes agrupar los datos por esta nueva columna y la columna de nombre, y contar la cantidad de años únicos en los que aparece cada nombre en cada década utilizando la función nunique. Por último, puedes filtrar el dataframe resultante para incluir solo los nombres que aparecen en todas las décadas.

    Aquí está el código para lograr esto:

    import pandas as pd
    
    # crear datos de muestra
    data = pd.DataFrame({'Nombre': ['Nombre1', 'Nombre2', 'Nombre3', 'Nombre4', 'Nombre7', 'Nombre3', 'Nombre9'],
                         'Año': [1950, 1951, 1952, 1953, 2019, 2020, 2021]})
    
    # crear nueva columna con década
    data['Década'] = (data['Año'] // 10) * 10
    
    # agrupar por década y nombre, contar años únicos
    conteos = data.groupby(['Década', 'Nombre'])['Año'].nunique().reset_index()
    
    # filtrar para incluir solo los nombres que aparecen en todas las décadas
    repetidos_cada_década = conteos.groupby('Nombre').filter(lambda x: x['Década'].nunique() == x['Década'].nunique())
    
    # extraer nombres que aparecen en todas las décadas
    resultado = repetidos_cada_década['Nombre'].unique()
    
    print(resultado)
    

    Esto debería imprimir:

    ['Nombre3']
    

Comments are closed.