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

如何从pandas的value_counts()结果中获取分类数及首个统计值

解决方案

1. 获取类别总数的实现方法

value_counts()返回的是存储每个类别计数的Series结构,要获取不同类别的总数有两种常用方案:

  • 直接调用nunique()方法一步得到结果:
class_count = s['Class'].nunique()
  • 如果已经生成了value_counts()的结果,直接取该结果的长度即可:
class_value_counts = s['Class'].value_counts()
class_count = len(class_value_counts)

2. 遍历类别计算频率+通用熵计算

你当前entropy函数中的p1、p2是硬编码的,可基于value_counts()的结果直接遍历计算,修改后的entropy函数参考:

def entropy(s):
    # 先获取每个类别的计数
    class_value_counts = s['Class'].value_counts()
    # 数据集总样本数
    total = len(s)
    ent = 0.0
    # 遍历每个类别的计数计算熵
    for count in class_value_counts:
        p = count / total
        ent -= p * log2(p)
    return ent 

如果需要按类别分组统计属性A的取值频率,可直接使用pandas的groupby方法实现:

# 按Class分组,返回A列每个取值的归一化频率
a_freq_by_class = s.groupby('Class')['A'].value_counts(normalize=True)

额外优化提示

  • 你当前代码里的信息增益计算公式有误,标准信息增益是 父节点熵 - 子节点加权熵和,你现在的代码只计算了子节点加权熵和,需要补充父节点熵的计算再做减法才能得到正确的信息增益。
  • 阈值选择目前是硬编码为6,实际熵离散化需要遍历所有可能的分割点计算信息增益,选择增益最大的点作为分割阈值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:24:03