Cómo pasar otra columna completa como argumento a pandas fillna()
Me gustaría completar los valores faltantes en una columna con valores de otra columna, usando fillna
el método.
(Leí que recorrer cada fila sería una muy mala práctica y que sería mejor hacer todo de una vez, pero no pude descubrir cómo hacerlo fillna
).
Datos antes:
Day Cat1 Cat2
1 cat mouse
2 dog elephant
3 cat giraf
4 NaN ant
Datos después:
Day Cat1 Cat2
1 cat mouse
2 dog elephant
3 cat giraf
4 ant ant
Aceptado
Puede proporcionar esta columna fillna
(ver documentos ), utilizará esos valores en índices coincidentes para completar:
In [17]: df['Cat1'].fillna(df['Cat2'])
Out[17]:
0 cat
1 dog
2 cat
3 ant
Name: Cat1, dtype: object
Podrías hacerlo
df.Cat1 = np.where(df.Cat1.isnull(), df.Cat2, df.Cat1)
La construcción general del RHS utiliza el patrón ternario del pandas
libro de cocina (que vale la pena leer en cualquier caso). Es una versión vectorial de a? b: c
.
Simplemente use el value
parámetro en lugar de method
:
In [20]: df
Out[20]:
Cat1 Cat2 Day
0 cat mouse 1
1 dog elephant 2
2 cat giraf 3
3 NaN ant 4
In [21]: df.Cat1 = df.Cat1.fillna(value=df.Cat2)
In [22]: df
Out[22]:
Cat1 Cat2 Day
0 cat mouse 1
1 dog elephant 2
2 cat giraf 3
3 ant ant 4