【问题标题】:How can I plot a stacked bar chart of median of a column in pandas dataframe?如何绘制熊猫数据框中列中位数的堆积条形图?
【发布时间】:2021-05-10 16:16:36
【问题描述】:

所以我是一个学习 pandas (python) 数据可视化的新手,我的任务是为 30 到 35 岁的年龄段创建一个中位数 WeekHrs 和 CodeRevHrs 的堆叠图表。

以下是我的代码,我在其中提取了在年龄列上应用过滤器的数据,以下是我的数据集的前五行

age_filter= agework [(agework["age"]>= 30 )&(agework["age"]<=35)] 
median_weekhrs= age_filter["Weekhrs"].median()
median_coderev= age_filter["CodeRevHrs"].median()

age_filter.head()

    CodeRevHrs  Weekhrs age
5   3.0          8.0    31.0
11  2.0         40.0    34.0
12  2.0         40.0    32.0
18  15.0        42.0    34.0
22  2.0         40.0    33.0

如何绘制带有中位数的堆积条形图?

请帮忙

【问题讨论】:

标签: python pandas stacked-chart


【解决方案1】:

首先,过滤年龄(并将年龄转换为int,因为它可以使标签更清晰):

df = agework.query('30 <= age <= 35')
df['age'] = df['age'].astype(int)

然后,您可以绘制每个年龄组中两个数量的中位数的条形图:

df.groupby('age').median().plot.bar(stacked=True)
plt.title('Median hours, by age')

顺便说一句,您可以对值的堆叠方式施加任意顺序。例如,如果您希望在底部添加'Weekhrs',您可以说:

order = ['Weekhrs', 'CodeRevHrs']
df.groupby('age')[order].median().plot.bar(stacked=True)
plt.title('Median hours, by age')

现在,如果您想为整个过滤的年龄范围绘制这些数量的总体中位数(如您所说:每个数量只有一个数字),那么一种方法(其中)将是:

label = f"{df['age'].min()}-{df['age'].max()}"
df.median().drop('age').to_frame(label).T.plot.bar(stacked=True)
plt.title(f'Median hours for age {label}')

【讨论】:

    猜你喜欢
    • 2019-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    相关资源
    最近更新 更多