我有一个数据框,里面有x,y,z列,有3个X列和3个Xd列,我想在一个名为id的新列中得到最小的Xd列和他的X。
df:
x y z a ad b bd c cd
4 8 1 1 2 2 8 3 5
7 5 6 1 6 2 3 3 1
7 3 5 1 9 2 4 3 7
result:
x y z id
4 8 1 1
7 5 6 3
7 3 5 2
试试这个,使用 arrays_zip
,高阶函数 filter
和 array_min
.
from pyspark.sql import functions as F
df.withColumn("zip", F.arrays_zip(F.array('a','b','c'),F.array('ad','bd','cd')))\
.withColumn("id", F.expr("""filter(zip,x-> x.`1`=array_min(array(ad,bd,cd)))"""))\
.select("x","y","z", (F.col("id.0")[0]).alias("id")).show()
#+---+---+---+---+
#| x| y| z| id|
#+---+---+---+---+
#| 4| 8| 1| 1|
#| 7| 5| 6| 3|
#| 7| 3| 5| 2|
#+---+---+---+---+