我想比较 PySpark 中的 3 列(百分比总和为 100%)以创建一个新列,其中包含 3 列中最大值的列名,或者如果最大值不是唯一的,则包含列的名称具有相同的值。我在这里看到了一些类似的例子,但当最大值不唯一时,它们不处理这种情况。下面是我的蛮力解决方案,但是它需要很长时间才能运行变得毫无用处:
df\
.withColumn("MaxName",
F.when( (col(A)>col(B)) & (col(A)>col(C)), "A")\
.when( (col(B)>col(A)) & (col(B)>col(C)), "B")\
.when( (col(C)>col(A)) & (col(C)>col(B)), "C")\
.when( (col(A)==col(B)) &\
(col(A)>col(C)) | (col(B)>col(C)), "AB")\
.when( (col(C)==col(B)) | (col(C)==col(A)) &\
(col(C)>col(B)) | (col(C)>col(A)), "CAB")\
.otherwise("ABC")
有什么见解可以构建更高效的解决方案吗?
隔江千里
相关分类