es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Reemplace NaN dentro de una columna por otro DataFrame usando una condición.

Tengo un Dataframe como el de abajo y tenemos NaN solo en la columna ‘Type 2’:

id Type 1 Type 2
0 a b
1 c d
2 e NaN
3 g f
4 i h
5 j k
6 l NaN
7 m NaN
8 o p
9 x y
9 z NaN

Y otro es un Dataframe ordenado como el de abajo:

id Type 1 Type 2
0 a o1
1 b o2
2 c o3
3 d o4
23 x o24
24 y o25
25 z o26

Quiero llenar los NaN dentro de la columna ‘Type 2’ con el valor correspondiente de Type 2 del segundo Dataframe. Sé que debería usar fillna (), pero no sé cómo agregar las condiciones como las mencionadas arriba.

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para llenar NaN dentro de la columna ‘Type 2’ con el correspondiente ‘Type 2’ del segundo DataFrame ‘Type 2’, se puede utilizar el siguiente código:

    df1['Type 2'] = df1.apply(lambda x: df2.loc[df2['Type 1']==x['Type 1'], 'Type 2'].values[0] if pd.isnull(x['Type 2']) else x['Type 2'], axis=1)
    

    Este código utiliza la función apply() con una función lambda que verifica si el valor en ‘Type 2’ es nulo en DataFrame1 (df1), si es nulo, entonces localiza el correspondiente ‘Type 2’ para ese ‘Type 1’ en DataFrame2 (df2) utilizando la función loc() y actualiza el valor, de lo contrario, mantiene el valor como está.

    El código anterior asume que cada ‘Type 1’ en df1 tiene solo un ‘Type 2’ correspondiente en df2. Si tiene múltiples valores ‘Type 2’, puede modificar la función lambda para devolver una lista de valores y explotarla usando la función explode().

    df1['Type 2'] = df1.apply(lambda x: df2.loc[df2['Type 1']==x['Type 1'], 'Type 2'].tolist() if pd.isnull(x['Type 2']) else [x['Type 2']], axis=1)
    df1 = df1.explode('Type 2')
    

    Tenga en cuenta que en el código anterior, usamos el parámetro ‘axis=1’ para especificar que queremos aplicar la función lambda a cada fila del DataFrame.

    ¡Espero que esto ayude! Háganme saber si tienen más preguntas.

Comments are closed.