Se debe tener en cuenta que, al momento de realizar el último ítem, se debe cambiar el tipo Object
de la columna Aprobado por el tipo bool
. Sin embargo, no es tan simple como agregar .astype(bool)
, ya que esto modificará todos los valores a True
. Por lo tanto, se debe utilizar .str.strip()
para convertir los valores a tipo str (sin espacios), y luego utilizar la función map
para convertirlos a valores booleanos.
Codigo
url = 'https://gist.githubusercontent.com/ahcamachod/807a2c1cf6c19108b2b701ea1791ab45/raw/fb84f8b2d8917a89de26679eccdbc8f9c1d2e933/alumnos.csv'
df_alumnos = pd.read_csv(url, delimiter=',')
#Reemplazamos los valores erroneos llamados Verdadero a True, ademas de reemplazar los NaN por 0
df_alumnos['Aprobado'] = df_alumnos['Aprobado'].replace('Verdadero', True)
df_alumnos = df_alumnos.fillna(0)
df_alumnos.head(5)
# Creamos la columna Puntos_Extra que sera un 40% del valor de la Nota del alumno
df_alumnos['Puntos_Extra'] = df_alumnos['Nota'] * 0.4
df_alumnos.tail(5)
# Creamos la columna Notas_finales sumando la Nota y los Puntos Extra
df_alumnos['Notas_finales'] = df_alumnos['Nota'] + df_alumnos['Puntos_Extra']
df_alumnos.sample(5)
# Creamos la columna Aprobado_final para saber si algun alumno aprobo con los puntos extra
df_alumnos['Aprobado_final'] = df_alumnos['Notas_finales'].apply( lambda x: True if x >= 7.0 else False)
#Comprobamos resultado
df_alumnos.sample(5)
# Revisamos los tipos de datos con los que trabajamos
df_alumnos.dtypes
# Se utiliza map ya que solo vamos a trabajar con una columna, si fueran mas, es mejor utilizar apply
df_alumnos['Aprobado'] = df_alumnos['Aprobado'].str.strip().map(lambda x: True if x == "True" else False)
df_alumnos
#Revisamos que se haya modificado el tipo Object a Bool
df_alumnos.dtypes
#Creamos el filtro
filtro = df_alumnos.apply(lambda x: x['Aprobado'] == False and x['Aprobado_final'] == True, axis=1)
filtro
#Aplicamos el filtro
filtrados = df_alumnos[filtro]
filtrados
Resultado ultimo item