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!
davy.ai
Para obtener el resultado deseado, podrías usar el siguiente código:
Explicación:
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)
devuelve1980
. Aplicaremos esta función a la columnaaño
para crear una nueva columna llamadaDécada
.Luego, creamos una nueva columna llamada
EnRango
, que es el resultado de una expresión booleana que verifica si laDé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 columnaEnRango
es verdadero utilizandoresultado[resultado]
. Finalmente, utilizamosindex.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.