获取最小列间值 pyspark

问题描述 投票:1回答:1

我有一个数据框,里面有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
python dataframe pyspark minimum
1个回答
2
投票

试试这个,使用 arrays_zip,高阶函数 filterarray_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|
#+---+---+---+---+
© www.soinside.com 2019 - 2024. All rights reserved.