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

如何在Pandas每行多列中确定分类标签最高出现频次并生成新列

刚好碰到过类似的需求,用Pandas的mode()函数就能轻松解决这个问题,直接按行计算众数就行,具体看下面的步骤:

解决方法:用Pandas的mode()计算每行众数

首先,先构造你给出的示例数据:

import pandas as pd

# 构造示例DataFrame
data = {
    'Class_1': ['versicolor', 'virginica', 'virginica', 'versicolor', 'versicolor'],
    'Class_2': ['setosa', 'versicolor', 'setosa', 'setosa', 'versicolor'],
    'Class_3': ['setosa', 'virginica', 'setosa', 'setosa', 'virginica']
}
df = pd.DataFrame(data)

接下来,直接给每行添加Predictions列,值为该行所有Class列中出现次数最多的标签:

# 按行计算众数,取第一个结果作为Predictions
df['Predictions'] = df.mode(axis=1)[0]

运行后得到的结果完全符合你的期望:

Class_1     Class_2     Class_3 Predictions
0  versicolor      setosa      setosa      setosa
1   virginica  versicolor   virginica   virginica
2   virginica      setosa      setosa      setosa
3  versicolor      setosa      setosa      setosa
4  versicolor  versicolor   virginica  versicolor

补充说明:处理多众数的情况

如果某一行存在多个出现次数相同的标签(比如三列里三个标签各出现1次),mode()会返回所有符合条件的标签,这时候[0]会默认取第一个出现的标签。

如果需要自定义这种场景的处理逻辑,比如返回多个标签或者指定规则,可以用自定义函数实现:

# 自定义处理多众数的函数
def get_most_frequent(row):
    counts = row.value_counts()
    max_count = counts.max()
    # 获取所有出现次数等于max_count的标签
    most_frequent = counts[counts == max_count].index.tolist()
    # 这里可以自定义规则,比如返回第一个,或者用逗号分隔多个标签
    return most_frequent[0] if len(most_frequent) > 0 else None

df['Predictions'] = df.apply(get_most_frequent, axis=1)

这个函数更灵活,你可以根据需求调整返回值,比如当有多个众数时返回拼接后的字符串或者列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:08:48