使用groupby进行绘图

用户名

我对如何绘制以下数据有些困惑:

url          1999         2000               2001
 
url1         20/01/1999   03/01/2000         NaN
url1         21/01/1999   NaN                NaN
url1         23/01/1999   NaN                NaN
url2         12/01/1999   NaN                12/01/2001
url2         13/03/1999   NaN                22/01/2001
url2         14/03/1999   NaN                24/10/2001

我想通过时间在不同的条形图中绘制网址,所以像这样:

url1         1999(plotting data by month in 1999)     2000 (plotting data by month in 2000)
url2         1999     2001
...

(以下仅作为示例)

在此处输入图片说明

我试图首先按url分组,然后按每个列的月份分组,但是可能我用错误的方式进行了分组:

fig, ax = plt.subplots(figsize=(15,7))
data.groupby(['url','1999','2000','2001']).count().plot(ax=ax)

我有直到2020年的数据(所以groupby中的列应该到2020年,尽管在示例中,为简单起见,我只写了前三列)。

您能否告诉我在我的情况下使用groupby的正确方法是什么?

广晃

让我们尝试一下:

s = df.melt('url', var_name='year', value_name='date').dropna();
s['month'] = pd.to_datetime(s['date']).dt.month

plot_df = pd.crosstab([s['url'],s['month']], s['year'])

for url in plot_df.index.unique('url'):
    plot_df.loc[url].plot.bar(subplots=True,sharex=True,sharey=True, layout=(1,-1))
    plt.show()

这样您会得到不同的情节:

在此处输入图片说明

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章