我想比较pyspark中的3列(百分比总和为100%),以创建一个新的列,其中包含3列中最大值的列名,或者,如果最大值不唯一,则包含具有相同值的列的名称。我在这里看到过一些类似的例子,但是它们不能处理max不是唯一的情况。下面是我的暴力解决方案,但它需要这么多时间才能变得毫无用处:
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")
有什么见解可以帮助您构建更高效的解决方案吗?
1条答案
按热度按时间mcvgt66p1#
如果我理解正确,你可以和
greatest
返回列名,然后concat:example:输入:
建议解决方案: