我有一个包含
等数据的CSV4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-09-30 18:14:58,57,4
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-09-30 20:11:15,1884,90
4be390eefaf9a64e7cb52937c4a5c77a,"e1.ru",2014-10-04 09:44:21,1146,6
4be390eefaf9a64e7cb52937c4a5c77a,"avito.ru",2014-09-29 21:01:29,48,3
我将其排序为
print(infile.groupby(['address', infile['used_at'].dt.year]).active_seconds.sum())
我得到了数据:
address used_at
am.ru 2014 413071
2015 183402
auto.ru 2014 9122342
2015 6923367
avito.ru 2014 84503151
2015 87688571
avtomarket.ru 2014 106849
2015 95927
cars.mail.ru/sale 2014 211456
2015 167278
drom.ru 2014 11014955
2015 9704124
e1.ru 2014 28678357
2015 27961857
irr.ru/cars 2014 222193
2015 133678
我需要像这样example
创建条形图但我需要在2014年和2015年对每个网站(在x轴)和active_seconds
(在y轴)的总和进行分类。
在示例中,他们使用np.array,但我有对象类型系列。
我尝试这样做:
width = 0.35
plt.figure()
ax = graph_by_duration['address'].plot(kind='bar', secondary_y=['active_seconds'])
ax.set_ylabel('Time online')
ax.set_title('Time spent online per web site, per year')
plt.show()
我应该将其转换为np.array或进程来执行此操作吗?
答案 0 :(得分:2)
我认为您可以先添加reset_index
,然后pivot
DataFrame
来创建列2014
和2015
。上次使用plot.bar
:
df = infile.groupby(['address', infile['used_at'].dt.year]).active_seconds.sum()
.reset_index()
print df
address used_at active_seconds
0 am.ru 2014 413071
1 am.ru 2015 183402
2 auto.ru 2014 9122342
3 auto.ru 2015 6923367
4 avito.ru 2014 84503151
5 avito.ru 2015 87688571
6 avtomarket.ru 2014 106849
7 avtomarket.ru 2015 95927
8 cars.mail.ru/sale 2014 211456
9 cars.mail.ru/sale 2015 167278
10 drom.ru 2014 11014955
11 drom.ru 2015 9704124
12 e1.ru 2014 28678357
13 e1.ru 2015 27961857
14 irr.ru/cars 2014 222193
15 irr.ru/cars 2015 133678
graph_by_duration = df.pivot(index='address', columns='used_at', values='active_seconds')
print graph_by_duration
used_at 2014 2015
address
am.ru 413071 183402
auto.ru 9122342 6923367
avito.ru 84503151 87688571
avtomarket.ru 106849 95927
cars.mail.ru/sale 211456 167278
drom.ru 11014955 9704124
e1.ru 28678357 27961857
irr.ru/cars 222193 133678
ax = graph_by_duration.plot.bar(figsize=(10,8))
ax.set_ylabel('Time online')
ax.set_title('Time spent online per web site, per year')
plt.show()