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

为决策树选择最佳分割变量:分组统计元素出现次数

统计每个首元素对应标签的出现次数(决策树分割变量分析)

嘿,针对你要统计每个首元素对应None、Basic、Premium三类标签出现次数的需求,我给你整理了几种实用的Python实现方法,刚好能帮你为决策树找最佳分割变量做准备!

先明确你的输入数据:

zipped = [('a', 'None'), ('b', 'Premium'), ('c', 'Basic'), ('d', 'Basic'), ('b', 'Premium'), ('e', 'None'), ('e', 'Basic'), ('b', 'Premium'), ('a', 'None'), ('c', 'None'), ('b', 'None'), ('d', 'None'), ('c', 'Basic'), ('a', 'None'), ('b', 'Basic'), ('e', 'Basic')]

方法1:手动字典统计(适合理解原理)

这种方法最直观,能清晰看到计数的过程,适合刚接触数据统计的场景:

# 初始化统计字典,确保每个首元素都包含三类标签的初始计数
counts = {}
for key, category in zipped:
    if key not in counts:
        counts[key] = {'None': 0, 'Basic': 0, 'Premium': 0}
    counts[key][category] += 1

# 打印统计结果
for key, stats in counts.items():
    print(f"{key}: {stats}")

运行结果:

a: {'None': 3, 'Basic': 0, 'Premium': 0}
b: {'None': 1, 'Basic': 1, 'Premium': 3}
c: {'None': 1, 'Basic': 2, 'Premium': 0}
d: {'None': 1, 'Basic': 1, 'Premium': 0}
e: {'None': 1, 'Basic': 2, 'Premium': 0}

方法2:用collections工具简化代码(简洁高效)

利用Python标准库的defaultdict和Counter,可以减少手动初始化的代码,更适合日常开发:

from collections import defaultdict, Counter

# 用defaultdict自动为新的首元素创建Counter对象
counts = defaultdict(Counter)
for key, category in zipped:
    counts[key][category] += 1

# 统一格式,确保每个首元素都显示三类标签(没出现的补0)
final_counts = {
    key: {
        'None': count.get('None', 0),
        'Basic': count.get('Basic', 0),
        'Premium': count.get('Premium', 0)
    }
    for key, count in counts.items()
}

# 输出结果
for key, stats in final_counts.items():
    print(f"{key}: {stats}")

这个方法的输出和方法1完全一致,代码更简洁,还能自动处理新出现的首元素。

方法3:用Pandas生成交叉表(适合数据分析场景)

如果后续还要做决策树建模,用Pandas会更方便,因为它能直接生成结构化的统计表格,便于后续分析:

import pandas as pd

# 把列表转成DataFrame
df = pd.DataFrame(zipped, columns=['Key', 'Category'])

# 生成交叉表,统计每个Key对应各Category的次数
count_table = pd.crosstab(df['Key'], df['Category'])

# 确保三类标签都存在,没有的列补0
for category in ['None', 'Basic', 'Premium']:
    if category not in count_table.columns:
        count_table[category] = 0

# 调整列的顺序,和需求一致
count_table = count_table[['None', 'Basic', 'Premium']]

print(count_table)

运行结果:

Category  None  Basic  Premium
Key                           
a            3      0        0
b            1      1        3
c            1      2        0
d            1      1        0
e            1      2        0

这个表格形式的结果非常适合后续计算基尼系数、信息增益等决策树分割指标,直接用Pandas的函数就能处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:37:20