如何用Pandas制作按Sex分组的disease计数分组条形图
按性别分组的患病计数分组条形图实现方法
你之前的代码直接将Sex设为索引后绘图,本质是把每一行数据单独生成条形,没有对同性别、同患病状态的样本做计数统计,所以显示的是单个数据点而非总计。要实现目标分组条形图,需要先完成统计再绘图,具体步骤如下:
步骤1:统计分组计数
可以用两种方式得到每个性别下患病(disease=1)和未患病(disease=0)的人数:
方法一:用pd.crosstab(直观简洁)
import pandas as pd import matplotlib.pyplot as plt # 生成统计结果:行是性别,列是患病状态,值为对应人数 count_df = pd.crosstab(heart_failure_df['Sex'], heart_failure_df['disease'])
方法二:用groupby+size+unstack
# 按性别、患病状态分组计数,再将多层索引转为列(fill_value=0避免缺失值) count_df = heart_failure_df.groupby(['Sex', 'disease']).size().unstack(fill_value=0)
两种方法都会生成如下结构的统计DataFrame:
| Sex | 0 | 1 |
|---|---|---|
| f | 1 | 1 |
| m | 1 | 2 |
步骤2:绘制分组条形图
基于统计后的DataFrame绘图,就能得到每个性别对应两个条形的分组图:
count_df.plot(kind='bar', figsize=(8, 5)) plt.xlabel('性别') plt.ylabel('人数') plt.title('不同性别患病/未患病人数统计') plt.legend(['未患病', '患病']) # 自定义图例名称,更直观 plt.show()
运行后会生成你需要的分组条形图:每个性别组包含两个条形,分别对应未患病和患病的人数。
内容的提问来源于stack exchange,提问作者blub_9
相关产品推荐
相关产品推荐

