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.

Obtener nombre si los valores del rango son verdaderos en Python

Tengo una pregunta sobre pandas sobre cómo obtener un nombre si un rango de valores es verdadero en una columna X. Si el año está dentro de su década desde 1960 hasta ahora, imprimir el nombre. Aquí hay un ejemplo de mi dataframe:

#,Nombre,descripción,año
1,a,foo,1961
2,a,foo2,1977
3,a,foo3,1980
4,a,foo4,1995
5,a,foo5,2001
6,a,foo6,2011
7,a,foo7,2020
8,b,bar,1965
9,b,bar2,1970
10,b,bar3,1983
11,b,bar4,1997
12,b,bar5,2005
13,b,bar6,2016
14,b,bar7,2022
15,c,abc,1965
16,c,ab2,1970
17,c,abc3,1993
18,c,abc4,2007
19,c,abc5,2015
20,c,abc6,2020

Resultado: a,b

Hasta ahora, hice esto:

dataset[Year].str.match(str(year[0:3]))

Creo que necesito un bucle for para esto, pero no estoy seguro en absoluto. ¡Gracias por cualquier ayuda!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para obtener el resultado deseado, podrías usar el siguiente código:

    import pandas as pd
    
    # Leyendo el dataframe
    df = pd.read_csv('tu_data.csv')
    
    # Creando una función para obtener la década de un año
    def obtener_decada(año):
        return int(str(año)[:3] + '0')
    
    # Comprobando si el año está dentro de su década desde 1960 hasta ahora
    df['Década'] = df['año'].apply(obtener_decada)
    df['EnRango'] = (df['Década'] >= 1960) & (df['Década'] <= 2020)
    
    # Agrupando por Nombre y seleccionando aquellos que tengan al menos un EnRango verdadero
    resultado = df.groupby('Nombre')['EnRango'].any()
    print(resultado[resultado].index.tolist())
    

    Explicación:

    • Primero, leemos el DataFrame utilizando pd.read_csv('tu_data.csv'), asumiendo que los datos están almacenados en un archivo CSV.
    • A continuación, creamos una función llamada obtener_decada que recibe un año como entrada y devuelve la década de ese año como un entero. Por ejemplo, obtener_decada(1985) devuelve 1980. Aplicaremos esta función a la columna año para crear una nueva columna llamada Década.

    • Luego, creamos una nueva columna llamada EnRango, que es el resultado de una expresión booleana que verifica si la Década se encuentra entre 1960 y 2020 (inclusive).

    • Después de eso, agrupamos el DataFrame por Nombre y seleccionamos solo los grupos donde al menos un elemento de la columna EnRango es verdadero utilizando resultado[resultado]. Finalmente, utilizamos index.tolist() para obtener la lista de nombres únicos de esos grupos.

    La salida de este código será ['a', 'b'], que es lo que esperábamos.

Comments are closed.