【问题标题】:Pandas histogram by dates, and sorted by categoriesPandas 按日期排列的直方图,并按类别排序
【发布时间】:2016-01-20 17:47:36
【问题描述】:

我可能无法理解 pandas 中的分组,也无法生成按类别堆叠的直方图。

这是我正在尝试做的一个工作示例。实际上,我正在遍历许多文件,从每个文件中创建一个字典,然后将其附加到包含所有字典的列表中。然后我将其转换为数据框并将日期字符串转换为日期时间对象。

import pandas as pd

# Stand in for dictionaries created by looping over some files
d1={'fruit':'banana','vege':'spinach','date':'August 1, 2014'}
d2={'fruit':'banana','vege':'carrots','date':'August 1, 2014'}
d3={'fruit':'banana','vege':'peas','date':'August 1, 2015'}
d4={'fruit':'orange','vege':'spinach','date':'August 1, 2014'}
d5={'fruit':'orange','vege':'carrots','date':'August 1, 2015'}
data=[d1,d2,d3,d4,d5]

# Create the dataframe, turn the date strings into datetime objects
df=pd.DataFrame(data)
df.date2=pd.to_datetime(df.date) 

# This attempt at plotting gets me a histogram by year, but not divided how it should be.
df.groupby(df.date2.dt.year).count().plot(kind="bar")

生成的图如下所示:

我真正想要的是这样的:

我尝试过其他各种方法,例如

fr=df.groupby('fruit')

但是随后 fr.plot 失败了,因为

TypeError: Empty 'DataFrame': no numeric data to plot

提前感谢您的帮助!

【问题讨论】:

    标签: python pandas histogram


    【解决方案1】:

    怎么样:

    df.groupby(df.date2.dt.year)['fruit']\
        .value_counts()\
        .unstack(1)\
        .plot(kind='bar', stacked=True)
    

    产生:

    【讨论】:

      【解决方案2】:

      我建议将date 用作DateTimeIndex。对于pandas 0.17

      df['date'] = pd.to_datetime(df.date).dt.year
      df.set_index('date', inplace=True)
      df.groupby(level='date').fruit.value_counts().unstack('fruit').plot.bar(stacked=True)
      

      【讨论】:

      • 不确定是熊猫还是python版本的不同,但你的最后一行对我不起作用。但是,如果我这样做,它确实有效:df.groupby(level='date').fruit.value_counts().unstack().plot(kind='bar',stacked=True)。如果我在 unstack parantheses 中包含“fruit”,我会遇到错误,如果我使用 plot.bar 也会遇到错误。使用熊猫版本 0.16.1。
      猜你喜欢
      • 2020-12-06
      • 2022-08-11
      • 2012-03-28
      • 1970-01-01
      • 2022-01-19
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 2017-01-06
      相关资源
      最近更新 更多