Tengo un marco de datos pandas como abajo:
import pandas as pd
df = pd.DataFrame({'ORDER':["A", "A"], 'col1':[np.nan, np.nan], 'col2':[np.nan, 5]})
df
ORDER col1 col2
0 A NaN NaN
1 A NaN 5.0
Quiero crear una columna 'nueva' como suma (col1, col2) ignorando a Nan solo si una de las columnas es Nan, si ambas columnas tienen un valor de NaN, debería devolver NaN como se muestra a continuación
Intenté el siguiente código y funciona bien. ¿Hay alguna manera de lograr lo mismo con solo una línea de código?
df['new'] = df[['col1', 'col2']].sum(axis = 1)
df['new'] = np.where(pd.isnull(df['col1']) & pd.isnull(df['col2']), np.nan, df['new'])
df
ORDER col1 col2 new
0 A NaN NaN NaN
1 A NaN 5.0 5.0
3 respuestas
Hacer sum
con min_count
df['new'] = df[['col1','col2']].sum(axis=1,min_count=1)
Out[78]:
0 NaN
1 5.0
dtype: float64
Use la función add
en las dos columnas, que toma un argumento fill_value
que le permite reemplazar NaN
:
df['col1'].add(df['col2'], fill_value=0)
0 NaN
1 5.0
dtype: float64
¿Está bien?
df['new'] = df[['col1', 'col2']].sum(axis = 1).replace(0,np.nan)
Nuevas preguntas
python-3.x
Para preguntas sobre la programación de Python que son específicas de la versión 3+ del lenguaje. Use la etiqueta [python] más genérica en todas las preguntas de Python, y solo agregue esta si su pregunta es específica de la versión. Utilice las etiquetas [python-2.x] para las preguntas de Python 2.