Pandas DataFrame: reemplaza todos los valores en una columna, según la condición
Tengo un DataFrame simple como el siguiente:
Equipo | Primera Estación | Juegos totales | |
---|---|---|---|
0 | Cowboys de Dallas | 1960 | 894 |
1 | Osos de chicago | 1920 | 1357 |
2 | Empacadores de Green Bay | 1921 | 1339 |
3 | Delfines de Miami | 1966 | 792 |
4 | Los cuervos de Baltimore | 1996 | 326 |
5 | 49ers de San Francisco | 1950 | 1003 |
Quiero seleccionar todos los valores de la First Season
columna y reemplazar aquellos que son superiores a 1990 por 1. En este ejemplo, solo los Baltimore Ravens reemplazarían 1996 por 1 (manteniendo el resto de los datos intactos).
He usado lo siguiente:
df.loc[(df['First Season'] > 1990)] = 1
Pero reemplaza todos los valores de esa fila por 1, no solo los valores de la columna "Primera temporada".
¿Cómo puedo reemplazar solo los valores de esa columna?
Debes seleccionar esa columna:
In [41]:
df.loc[df['First Season'] > 1990, 'First Season'] = 1
df
Out[41]:
Team First Season Total Games
0 Dallas Cowboys 1960 894
1 Chicago Bears 1920 1357
2 Green Bay Packers 1921 1339
3 Miami Dolphins 1966 792
4 Baltimore Ravens 1 326
5 San Franciso 49ers 1950 1003
Entonces la sintaxis aquí es:
df.loc[<mask>(here mask is generating the labels to index) , <optional column(s)> ]
Puede consultar los documentos y también los 10 minutos para pandas que muestran la semántica.
EDITAR
Si desea generar un indicador booleano, puede usar la condición booleana para generar una serie booleana y convertir el tipo d int
para convertir True
y False
a 1
y 0
respectivamente:
In [43]:
df['First Season'] = (df['First Season'] > 1990).astype(int)
df
Out[43]:
Team First Season Total Games
0 Dallas Cowboys 0 894
1 Chicago Bears 0 1357
2 Green Bay Packers 0 1339
3 Miami Dolphins 0 792
4 Baltimore Ravens 1 326
5 San Franciso 49ers 0 1003
Un poco tarde para la fiesta, pero aún así prefiero usar numpy donde:
import numpy as np
df['First Season'] = np.where(df['First Season'] > 1990, 1, df['First Season'])
df.loc[df['First season'] > 1990, 'First Season'] = 1
Explicación:
df.loc
toma dos argumentos, 'índice de fila' e 'índice de columna'. Estamos verificando si el valor es mayor que 1990 de cada valor de fila, en la columna "Primera temporada" y luego lo reemplazamos con 1.
df['First Season'].loc[(df['First Season'] > 1990)] = 1
Es extraño que nadie tenga esta respuesta, la única parte que falta en su código es ['Primera temporada'] justo después de df y simplemente elimine las llaves del interior.