4

我有看起来像这样的数据

Date         Fruit
2017-01-01   Orange
2017-01-01   Apple
2017-01-08   Orange
2017-01-09   Orange
2017-01-09   Apple

我想在一个图中按日期绘制橙子数、苹果数。我该怎么做?

我按日期对它们进行分组,我看到了结果。

df.groupby(['Date','Fruit']).size()
Date         Fruit
2017-01-01   Orange  1
             Apple   1
2017-01-08   Orange  1
2017-01-09   Orange  1
             Apple   1

我试过这个,但它给出了一个有两个类别但不反对日期的条形图。

sns.catplot(x="Fruit", hue="Fruit", kind="count",
            palette="pastel", edgecolor=".6",
            data=df);

如何绘制一张图表,在 x 轴上有日期,每个日期有苹果的数量和橙子的数量?

4

2 回答 2

3

构建数据集:

df = pd.DataFrame(columns=["Date", "Fruit"], data=[['2017-01-01','Orange'], ['2017-01-01','Orange'], ['2017-01-01','Apple'], ['2017-01-08','Orange'], ['2017-01-09','Orange'], ['2017-01-09','Apple']])

数据看起来像这样

通过使用 unstack 和 group by 可以绘制条形图:

(df
 .groupby(['Date', 'Fruit'])
 .size()
 .unstack()
 .plot.bar()
)

这是按日期排列的情节

于 2019-05-22T23:17:26.230 回答
0

你可以做这样的事情。

# dummy data
date_range = pd.date_range('2019-01-01', '2019-01-06', freq='D')
df = pd.DataFrame(['Orange', 'Apple', 'Orange', 'Orange',
                   'Apple', 'Apple', 'Apple', 'Orange', 'Orange'],
    index=[date_range[0], date_range[0], date_range[1], date_range[2],
           date_range[2], date_range[2], date_range[2], date_range[3],
           date_range[3]],
    columns=['Fruit'])
df.index.name = 'Date'

groupby就像你做的那样,然后unstack,它看起来像这样。

>>> print(df.unstack())

Fruit       Apple  Orange
Date                     
2019-01-01    1.0     1.0
2019-01-02    NaN     1.0
2019-01-03    3.0     1.0
2019-01-04    NaN     2.0

然后绘制未堆叠的数据。

df.unstack().plot(kind='bar')
plt.show()

在此处输入图像描述

(不过,您必须对日期格式做一些事情)。

于 2019-05-11T07:14:36.307 回答