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

Pandas如何基于指定列返回每行符合自定义规则的最高频值

解决代码

import pandas as pd
from collections import Counter

# 构造原始DataFrame
data = {'Name':['Tom', 'nick', 'krish', 'jack'],
        'Book1':[20, 21, 19, 18],
       'Book2':[20,'', 12, 20],
       'Book3':[31, 21, 17, 16],
       'Book4':[31, 19, 18, 16]}
df = pd.DataFrame(data)

# 定义行处理逻辑
def cal_output(row):
    # 按列顺序取有效值,过滤空字符串
    valid_vals = [row[col] for col in ['Book1','Book2','Book3','Book4'] if row[col] != '']
    # 统计值出现次数
    count_dict = Counter(valid_vals)
    max_count = max(count_dict.values())
    # 筛选所有最高频值
    high_freq_vals = [k for k,v in count_dict.items() if v == max_count]
    
    # 所有值无重复返回Mix
    if max_count == 1:
        return 'Mix'
    # 按列顺序返回第一个出现的最高频值
    for val in valid_vals:
        if val in high_freq_vals:
            return val

# 生成Output列
df['Output'] = df.apply(cal_output, axis=1)

# 打印结果
print(df)

逻辑说明

内置的mode()方法会返回所有众数,无法匹配「同频次优先取列顺序靠前的值」的规则,自定义函数可以完全匹配需求:

  • 第一步先过滤空值,避免空字符串干扰统计结果
  • 统计完频次后如果最高频次为1,直接返回Mix
  • 同频次的情况下按原始列顺序遍历取值,确保第一个出现的高频值优先返回

运行后输出结果和你给出的预期完全一致。


内容的提问来源于stack exchange,提问作者Shi Jie Tio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 18:45:08