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

pandas按行计算多列众数时DataFrame出现多余列报错ValueError如何解决?

报错原因

pandas 中DataFrame.mode(axis=1)会返回每行的全部众数:如果某一行存在多个出现频次相等的最高频数值,就会为每个众数单独生成一列,缺失位置自动填充NaN。你遇到的报错是因为样本中至少有一行存在2个众数,导致mode返回了2列的DataFrame,无法直接赋值给单个新列。

解决方案
  • 方案1:直接取每行第一个众数
    无需额外逻辑的场景下,直接取mode返回结果的第一列即可,代码如下:

    finals_preds['ENSEMB'] = finals_preds[['ISOFOR','SVM-1C','KMEANS','LOCOUT']].mode(axis=1)[0]
    
  • 方案2:自定义多众数处理规则
    如果需要明确指定多众数时的取值逻辑(比如取数值更小的、按算法优先级取),可以用apply自定义行处理函数,示例如下:

    def get_row_mode(row):
        count_res = row.value_counts()
        # 提取所有众数
        all_modes = count_res[count_res == count_res.max()].index.tolist()
        # 示例逻辑:多众数时取数值最小的,可根据业务需求修改
        return min(all_modes)
    
    finals_preds['ENSEMB'] = finals_preds[['ISOFOR','SVM-1C','KMEANS','LOCOUT']].apply(get_row_mode, axis=1)
    
  • 方案3:多众数场景特殊标记
    如果多众数属于需要排查的异常情况,可以给这类行填充自定义标记,方便后续处理:

    mode_res = finals_preds[['ISOFOR','SVM-1C','KMEANS','LOCOUT']].mode(axis=1)
    # 单众数取众数值,多众数填充标记999
    finals_preds['ENSEMB'] = mode_res[0].where(mode_res.shape[1] == 1, 999)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:30:02