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

如何统计pandas数据集中Class列的类别频率用于熵离散化计算

问题修复方案

你代码的错误根源是:df = s['Class']取到的是一维Series对象,无法直接给Series新增freq列,导致统计逻辑报错。以下是两种正确实现统计Class列频率的方法:

方法1:使用value_counts()直接统计(最适合熵计算场景)

你已经调用了value_counts(),这个接口会直接返回每个类别的出现次数,除以总样本数即可得到概率,修改后的entropy函数如下:

def entropy(s):
    # 计算类别总数,会正确输出2
    numberOfClasses = s['Class'].nunique()
    print(f'Number of classes: {numberOfClasses}')
    total_sample = len(s)
    # 拿到每个Class值的出现次数
    class_count = s['Class'].value_counts()
    ent = 0.0
    # 动态遍历所有类别计算熵
    for cnt in class_count:
        p = cnt / total_sample
        ent -= p * log2(p)
    # 单独取类别1和类别2的概率
    p1 = class_count.get(1, 0) / total_sample
    p2 = class_count.get(2, 0) / total_sample
    print(f'Class=1出现频率:{p1},Class=2出现频率:{p2}')
    return ent

方法2:修正你的groupby+transform写法

如果你需要保留原来的transform实现逻辑,应该在完整DataFrame上操作,而非单独取出的Class列:

# 给原DataFrame新增freq列,存储每行对应Class的总出现次数
s['freq'] = s.groupby('Class')['Class'].transform('count')
# 去重后即可得到每个Class对应的总次数
print(s[['Class','freq']].drop_duplicates())

内容的提问来源于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 18:15:02