¿Cómo obtener el valor de la columna más grande y su nombre de una lista[str] que contiene nombres de columnas en pyspark sql?
Tengo el siguiente código de muestra:
lst1 = [“a”, “b”]
para ls1 en lst1:
new_lst = []
lst2 = [“d”, “e”, “f”]
para ls2 en lst2:
new_lst.append(ls1 + ls2)
df = (df.withColumn(“final_” + ls1, greatest(*new_lst))
¿Es esta la forma correcta de obtener el valor máximo de la lista de columnas en cada bucle? También, ¿hay alguna forma de obtener el nombre de la columna correspondiente también?
Ejemplo:
df de entrada =>
ad ae af bd be bf cd ce cf
10 11 12 13 14 15 16 17 18
19 20 21 22 23 24 25 26 27
28 29 30 31 32 33 34 35 36
df de salida esperado =>
ad ae af final_a bd be bf final_b
10 11 12 12 13 14 15 15
19 20 21 21 22 23 24 24
28 29 30 30 31 32 33 33
¡Gracias!
davy.ai
El código dado parece ser un enfoque para encontrar el valor máximo de una lista de columnas en cada iteración del bucle.
new_lst
es una lista que contiene los nombres de columna obtenidos concatenandols1
del bucle externo yls2
del bucle interno. Luego se aplica la funcióngreatest
anew_lst
para obtener el valor máximo.Sin embargo, el código dado no produce la salida esperada ya que hay algunos problemas. En primer lugar, la variable
df
parece estar indefinida y no está claro cómo se crea. En segundo lugar, la forma en que se llama a la funciónwithColumn
creará una nueva columna en el dataframe con un nombre fijo"final_" + ls1
en cada iteración. Esto provocará columnas repetidas con el mismo nombre y las columnas originales no se actualizarán.Para obtener la salida esperada, necesitamos hacer algunas modificaciones. En primer lugar, podemos definir el dataframe de entrada
df
con los valores dados. En segundo lugar, podemos modificar la llamada de la funciónwithColumn
para actualizar las columnas originales con el valor máximo utilizando una cláusulawhen
. Finalmente, podemos agregar una nueva columna al dataframe para cada iteración para contener el nombre de columna correspondiente.A continuación se presenta el código modificado para obtener la salida esperada:
El dataframe de salida será:
El dataframe de salida tiene dos columnas adicionales
a_col
yb_col
que contienen el nombre de columna correspondiente. Estas columnas se pueden eliminar si no son necesarias.