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

如何在DataFrame上计算行众数且不排序,无众数时取首列值?

解决按行取众数,无众数时返回第一列值的问题

我懂你的困扰——df.mode(axis=1)在遇到没有唯一众数的行时,会返回多个值,导致结果结构混乱,完全不符合预期。这里有个简洁可靠的解决方案:

步骤1:定义行处理函数

先写一个自定义函数,专门处理单行的众数判断逻辑:

def get_mode_or_first_col(row):
    # 计算当前行的众数,保留所有可能的结果
    row_mode = row.mode(dropna=False)
    # 如果只有一个众数(即存在唯一出现次数最多的值),返回这个众数
    if len(row_mode) == 1:
        return row_mode.iloc[0]
    # 否则(所有值出现次数相同,无唯一众数),返回第一列(a1)的值
    else:
        return row['a1']

步骤2:应用函数到DataFrame的每一行

用apply方法把这个函数作用到每一行,就能得到我们想要的结果:

import pandas as pd

# 你的原始DataFrame
df = pd.DataFrame({'a1': [2,3,4,8,8], 'a2': [2,5,7,5,10], 'a3':[1,9,4,10,2]})

# 生成结果
result = df.apply(get_mode_or_first_col, axis=1)

# 输出查看
print(result)

运行结果

执行后会输出完全符合你期望的内容:

0    2
1    3
2    4
3    8
4    8
dtype: int64

为什么这个方法可行?

  • row.mode()会返回当前行所有出现次数最多的值:如果是唯一众数,结果长度为1;如果所有值出现次数相同(比如第二行的3、5、9各出现一次),结果会包含所有值,长度等于列数。
  • 我们通过判断结果长度,决定返回众数还是第一列的值,完美覆盖了你的需求场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:23:57