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

是否有Python函数可绘制各聚类下分类特征的类别占比统计图?

问题原因

你当前运行的代码返回的是带多重索引的Series结构,因此会按行堆叠展示分组结果,而非列格式。

单特征转换为列格式

如果要将单个特征的统计结果转成列展示(每行对应一个Cluster Label,每列对应Diagnosis的分类值),新增unstack()方法即可:

combinedDf.groupby(['Cluster Label'])['Diagnosis']\
          .value_counts(normalize=True)\
          .mul(100)\
          .round(1)\
          .astype(str) + '%'\
          .unstack() # 把内层的Diagnosis分类索引转换为列

如果需要输出标准两列结构(一列存分类值、一列存对应占比),可以用reset_index():

combinedDf.groupby(['Cluster Label'])['Diagnosis']\
          .value_counts(normalize=True)\
          .mul(100)\
          .round(1)\
          .astype(str) + '%'\
          .reset_index(name='占比') # 直接转换为DataFrame,指定占比列的列名

批量处理所有特征

如果要对数据集中除分组字段Cluster Label之外的所有特征执行相同统计,可以用循环批量处理:

import pandas as pd

# 定义存储所有特征统计结果的字典
feature_stats = {}
# 遍历排除分组字段后的所有特征列
for col in combinedDf.columns.drop('Cluster Label'):
    feature_stats[col] = combinedDf.groupby(['Cluster Label'])[col]\
                                   .value_counts(normalize=True)\
                                   .mul(100)\
                                   .round(1)\
                                   .astype(str) + '%'\
                                   .unstack()

# 调用示例:查看Diagnosis特征的统计结果
print(feature_stats['Diagnosis'])

# 如果需要合并所有特征的结果为总表,可使用concat拼接
all_stats = pd.concat(feature_stats, axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 06:54:03