Python 按日期和类别排序

Python 按日期和类别排序,python,pandas,histogram,Python,Pandas,Histogram,我可能在理解大熊猫的分组方面遇到了困难,也无法生成按类别堆叠的直方图 下面是一个我正在尝试做的工作示例。实际上,我正在循环许多文件,从每个文件中创建一个字典,然后将其附加到包含所有字典的列表中。然后我将其转换为数据帧,并将日期字符串转换为datetime对象 import pandas as pd # Stand in for dictionaries created by looping over some files d1={'fruit':'banana','vege':'spinach

我可能在理解大熊猫的分组方面遇到了困难,也无法生成按类别堆叠的直方图

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

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
提前感谢您的帮助

那么:

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

那么:

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

我建议使用
date
作为
DateTimeIndex
。对于
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)

我建议使用
date
作为
DateTimeIndex
。对于
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)

不确定这是否与pandas或python版本有所不同,但您的最后一行对我不起作用。但是,如果我这样做,它确实可以工作:df.groupby(level='date').fruit.value_counts().unstack().plot(kind='bar',stacked=True)。如果在unstack parantises中包含“fruit”,我会遇到一个错误,如果我使用plot.bar,也会遇到一个错误。使用pandas版本0.16.1。不确定pandas或python版本中是否存在差异,但您的最后一行对我不起作用。但是,如果我这样做,它确实可以工作:df.groupby(level='date').fruit.value_counts().unstack().plot(kind='bar',stacked=True)。如果在unstack parantises中包含“fruit”,我会遇到一个错误,如果我使用plot.bar,也会遇到一个错误。使用熊猫版本0.16.1。