You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python:带自定义条件的DataFrame各列众数计算实现求助

实现带自定义规则的DataFrame列众数计算

Hey there! Let's tackle this problem step by step. First, let's recreate your DataFrame so we can work with it directly:

import pandas as pd

data = [
    [1, 1, 1, 0, 0, 1, 0, 0, 0],
    [1, 1, 1, 0, 4, 0, 0, 2, 3],
    [1, 1, 1, 0, 0, 2, 4, 1, 3],
    [0, 2, 0, 0, 1, 0, 0, 0, 0],
    [0, 2, 0, 2, 0, 0, 4, 1, 3],
    [0, 2, 0, 2, 4, 0, 4, 1, 3],
    [0, 2, 0, 2, 4, 0, 4, 1, 3],
    [0, 2, 0, 0, 4, 0, 4, 1, 3]
]

df = pd.DataFrame(data, columns=[f"C{i}" for i in range(9)])

自定义规则回顾

  • 如果某列中数字1的出现次数 ≥3,返回众数为1
  • 如果某列中数字2的出现次数 ≥4,返回众数为2
  • 其他情况返回该列的真实众数

实现代码

We can write a custom function and use apply to process each column:

def custom_mode(col):
    # 统计1和2的出现次数
    count_1 = (col == 1).sum()
    count_2 = (col == 2).sum()
    
    # 优先检查规则1
    if count_1 >= 3:
        return 1
    # 再检查规则2
    elif count_2 >= 4:
        return 2
    # 都不满足时返回真实众数(取第一个众数避免多众数情况)
    else:
        return col.mode().iloc[0]

# 将函数应用到每一列,并整理成预期的行格式
result = df.apply(custom_mode).to_frame().T
print(result)

输出验证

运行上面的代码,你会得到完全符合预期的结果:

C0  C1  C2  C3  C4  C5  C6  C7  C8
0   1   2   1   0   4   0   4   1   3

代码解释

  1. custom_mode函数接收单列数据,先统计12的出现频次
  2. 规则1优先级高于规则2(即使出现极端的重叠情况,也能按要求执行)
  3. 若两个规则都不触发,调用col.mode()获取列的真实众数,用iloc[0]确保返回单个值(处理列存在多个众数的边界情况)
  4. 最后通过apply遍历所有列,再转置结果格式,匹配你需要的行式输出

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

火山引擎 最新活动