You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark如何获取DataFrame每行最大值对应的列索引

PySpark实现行最大值对应列索引的方案

核心实现思路

  • 先筛选出需要参与最大值比较的列(排除ID列)
  • 为每个待比较列绑定对应的索引值(Col1对应1,以此类推)
  • 利用PySpark内置数组函数找到每行最大值对应的索引

完整代码示例

首先导入依赖的函数:

from pyspark.sql import functions as F

假设你的原始DataFrame变量名为df,后续操作如下:

# 1. 筛选参与最大值比较的列,排除ID列
compare_cols = [col for col in df.columns if col != "ID"]
# 2. 构造(列值, 列索引)的结构体数组,索引从1开始匹配需求
value_index_array = F.array(*[
    F.struct(F.col(c).alias("value"), F.lit(idx + 1).alias("index"))
    for idx, c in enumerate(compare_cols)
])
# 3. 提取最大值对应的索引作为MAX列
df_result = df.withColumn("MAX", F.array_max(value_index_array).index)

补充说明

如果存在多个列数值相同且均为最大值的情况,上述代码会返回第一个出现的最大值对应的列索引。如果需要返回最后一个出现的索引,可以自定义UDF处理数组逻辑即可。

内容的提问来源于stack exchange,提问作者Gustavomoty

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 06:06:08