堆叠条形图数据框组

时间:2019-12-28 17:08:06

标签: python pandas matplotlib

我正在尝试从数据框中绘制堆积的条形图几个小时。很抱歉,如果这只是一个简单的问题,但是我无法解决它,我需要帮助。

我的数据框如下:

C:\Program Files

我想要显示的最终情节像this,但不是策略,而是每周的日期,C:\Program Files\WindowsApps\而不是产品,并且计数是相同的。

我尝试的是按 _id date news_source 0 2715eeada6726024df20e6938ef09f64 2019-12-23 airport-suppliers.com 1 d068a3d0b24d2a348ff8c8a856aba86c 2019-12-23 airport-suppliers.com 17 552d7bb9f7d3fd689dd308dc7650baac 2019-12-23 airport-suppliers.com 20 82be33a041204fd008ba5093607310f6 2019-12-23 airport-suppliers.com 21 4044907f5b6d5610ec59a03c75e0554c 2019-12-23 airportsinternational.keypublishing.com 22 db4e1e4d1246abc3304e5d77688424dc 2019-12-23 airportsinternational.keypublishing.com 23 b7f57b63218190d249d19624bbdcb520 2019-12-23 internationalairportreview.com 27 84d5377bd8755a685100e408140c4ab1 2019-12-23 internationalairportreview.com 28 8289a1c1b3fa3f618c332d61023eae00 2019-12-16 passengerterminaltoday.com 29 f4f020f09ee5f95499a26c43cfd82d2d 2019-12-16 airportsinternational.keypublishing.com .. ... ... ... 59 a18388a1c77889bdbe6aaa9238a8d21a 2019-12-16 airport-suppliers.com 62 5cd894a9fa587ab4267adfd23f01e1c4 2019-12-16 airportsinternational.keypublishing.com 66 bb7d05d61f999b1f0b317d21c6c23c0c 2019-12-16 airportsinternational.keypublishing.com 70 f49b9ce330198aec666cb90275d293b2 2019-12-16 internationalairportreview.com 71 af893db09fad9335413ce5c325ced712 2019-12-16 passengerterminaltoday.com 72 e21dc60cfda457b03a6dba6ab44aa3b1 2019-12-16 passengerterminaltoday.com 81 963760af4b4653d175902f4d6285ff0a 2019-12-16 passengerterminaltoday.com 82 778b572be28fd25f394cfa41bbc5aa4a 2019-12-16 airport-suppliers.com news_source分组,然后对它们进行计数。然后,我的其余工作变得一团糟,最后我无法使它采用this中的示例格式。另外,唯一的news_source日期的数量可能会随着时间而变化,因此我会尽量避免硬编码。

分组:

date

如果您需要将它们用作字典:

news_source

输出为:

groups = df.groupby(['date', 'news_source'])["_id"].count()

如果您知道如何正确执行操作,将非常感谢您的帮助。

以下是生成最少可重​​复示例的代码:

counts = defaultdict(dict)
for index, count in zip(groups.index, groups):
    try:
        counts[index[0]][index[1]] += count
    except KeyError:
        counts[index[0]][index[1]] = count

1 个答案:

答案 0 :(得分:1)

这个怎么样?我为您的数据添加了计数:

df1 = df.groupby(['date', 'news_source']).size().reset_index().rename(columns={0:'count'})

然后,我使用pd.crosstab,设置以下索引,列和值参数。然后添加一个aggfunc,在这种情况下为sum()。

pd.crosstab(index=df1['date'], columns=df1['news_source'], values=df1['count'], aggfunc=sum).plot.bar(stacked=True)

结果:

enter image description here