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.

Pyspark: emparejar columnas de dos dataframes diferentes y añadir valor.

Estoy intentando comparar los valores de dos columnas que existen en diferentes dataframes para crear un nuevo dataframe basado en la coincidencia de los criterios:

df1=

id
1
2
3
4
5

df2 =

id
2
5
1

Entonces, quiero agregar una ‘x’ en el campo ‘is_used’ cuando el campo de df2 existe en el campo de df1, de lo contrario agregar ‘NA’, para generar un dataframe de resultado como este:

df3 =

id is_used
1 X
2 X
3 NA
4 NA
5 X

He intentado hacerlo de esta manera, pero los criterios de selección colocan una “X” en todas las columnas:

df3 = df3.withColumn(‘is_used’, F.when(
condition = (F.arrays_overlap(F.array(df1.id), F.array(df2.id))) == False,
value = ‘NA’
).otherwise(‘X’))

Agradecería cualquier ayuda.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que estás tratando de comparar los valores de dos columnas que existen en diferentes dataframes para crear un nuevo dataframe basado en la coincidencia de los criterios. Puedes lograr esto usando la función F.arrays_overlap. Esta función devolverá True si los dos arrays se superponen y False si no. Luego puedes usar la función F.when para agregar una X en el campo is_used cuando el campo de df2 existe en el campo de df1, de lo contrario agregar NA.

    Por ejemplo:

    df3 = df3.withColumn('is_used', F.when(
        condition = (F.arrays_overlap(F.array(df1.id), F.array(df2.id))) == False,
        value = 'NA'
    ).otherwise('X'))
    

    Esto debería darte el resultado deseado de:

    id is_used
    1 X
    2 X
    3 NA
    4 NA
    5 X

Comments are closed.