我对如何绘制以下数据有些困惑:
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
我想通过时间在不同的条形图中绘制URL,所以类似这样:
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的正确方法是什么?
答案 0 :(得分:0)
让我们尝试一下:
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()
您会得到类似以下的情节: