从数据帧按十年堆叠直方图

时间:2019-10-16 13:41:09

标签: python pandas dataframe matplotlib

我有一个数据框,其中包含暴风雪的日期以及所述暴风雪的等级,范围为1950-2019。我想创建一个堆叠的直方图,其中x轴为十年,y轴为按类别的暴风雪计数。

下面列出了我要创建的示例。 Snowstorm climatology

我在理解如何精确地聚合数据方面遇到困难,这种方式将使我可以绘制类似共享的内容。

例如,这是1950年代数据帧的片段:

    Start       End         Category    Year    count
    1959-03-12  1959-03-14  2           1950    13
    1958-03-18  1958-03-23  3           1950    6
    1958-02-12  1958-02-18  3           1950    6
    1957-12-03  1957-12-05  1           1950    32
    1956-03-18  1956-03-20  1           1950    32

我拥有每个类别的所有计数,但是如何将其转换为可在堆叠直方图上绘制的数据?

1 个答案:

答案 0 :(得分:2)

首先汇总数据,然后使用参数stacked=True

进行绘制

pivot_table

df.pivot_table('count', 'Year', 'Category', 'sum').plot.bar(stacked=True)

groupby

df.groupby(['Year', 'Category'])['count'].sum().unstack().plot.bar(stacked=True)

enter image description here

请记住,您可以将聚合更改为其他内容。

df.pivot_table('count', 'Year', 'Category', 'first').plot.bar(stacked=True)
df.groupby(['Year', 'Category'])['count'].first().unstack().plot.bar(stacked=True)

此外,您可以事先删除重复项。

(
    df.drop_duplicates(['Year', 'Category'])
      .pivot_table('count', 'Year', 'Category')
      .plot.bar(stacked=True)
)