pandas 按性别列分组的条形图

fivyi3re  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(149)

我有一个数据框架,看起来像这样,我想尝试制作两个分组条形图,其中一个按性别分组,它显示了男性和女性的疾病计数:
| 年龄|性别|疾病|
| - -----|- -----|- -----|
| 二十三|m| 0|
| 四十三|m| 1|
| 三十二|关闭|0|
| 五十一|关闭|1|
| 二十九|m| 1|
这是我尝试过的,但它显示的是每个数据点,而不是总计数。
heart_failure_df.set_index(['Sex']).plot(y='disease', kind="bar")
这是我理想中想要的:

0g0grzrc

0g0grzrc1#

图表:

代码:

import pandas as pd
import matplotlib.pyplot as plt

d = {'Age': [23, 43, 32, 51, 29], 
     'Sex': ['m', 'm', 'f', 'f', 'm'],
     'disease': [0, 1, 0, 1, 1]}
df = pd.DataFrame(data=d)

df_pivot = pd.pivot_table(
    df,
    index="Sex",
    columns="disease",
    values="disease",
    aggfunc='count')

fig, ax = plt.subplots()
df_pivot.plot(kind="bar", ax=ax)
ax.legend(["Normal", "Heart Disease"]);
ax.tick_params(axis='x', rotation=0)
ax.set_ylabel("count")
  • Pivot将数据框以正确的格式绘制为pd.plot()的分组条形图,并在一个步骤中计算疾病的发生率。
  • 图例需要手动设置,因为在您的数据中disease是'0','1'。
bz4sfanl

bz4sfanl2#

首先制定您的数据

s = df.groupby('Sex')['Disease'].count()

然后切一小块
仅男性数据s['M']
仅女性数据s['F']
这将返回具有所需y轴和x轴的系列。之后,只是一个简单的情节将做你的伎俩
只需查看文档(https://matplotlib.org/stable/gallery/lines_bars_and_markers/barchart.html

相关问题