Pandas DataFrame: reemplaza todos los valores en una columna, según la condición

Resuelto ichimok asked hace 9 años • 10 respuestas

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 Seasoncolumna 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?

ichimok avatar Jul 20 '15 15:07 ichimok
Aceptado

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 intpara convertir Truey Falsea 1y 0respectivamente:

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
EdChum avatar Jul 20 '2015 08:07 EdChum

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'])
Amir F avatar Nov 27 '2018 11:11 Amir F
df.loc[df['First season'] > 1990, 'First Season'] = 1

Explicación:

df.loctoma 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.

Abdullah shafi avatar Jun 10 '2020 09:06 Abdullah shafi
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.

Odz avatar Feb 14 '2020 16:02 Odz