是否有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
相关产品推荐
相关产品推荐

