我有以下pandas数据帧:
>>> df
>>> StartDate Port Count
2011-08-10 11:07:10 3128 10
2011-08-10 11:07:40 80 1
2011-08-10 11:07:40 443 1
2011-08-10 11:07:40 3128 10
2011-08-10 11:08:00 443 1
2011-08-10 11:08:00 3128 9
2011-08-10 11:08:20 80 1
我想创建一个直方图,其中x轴将是' StartDate'在y轴上的句点将被计数,并且来自' Port'的每个值将有一列。柱。
我尝试使用groupby()和df.plot.bar(),但它没有给我我想要的结果。我怎么能这样做?
好吧,不是最好的画,但应该给出这个想法。 y轴是一个计数,每个条形代表来自' Port'柱。在x轴上是第一列的日期
答案 0 :(得分:1)
我认为您需要set_index
+ unstack
进行重塑和上次使用DataFrame.plot.bar
:
df1 = df.set_index(['StartDate','Port'])['Count'].unstack(fill_value=0)
print (df1)
Port 80 443 3128
StartDate
2011-08-10 11:07:10 0 0 10
2011-08-10 11:07:40 1 1 10
2011-08-10 11:08:00 0 1 9
2011-08-10 11:08:20 1 0 0
df1.plot.bar()
使用pivot
的替代解决方案:
df1 = df.pivot(index='StartDate', columns='Port', values='Count')
print (df1)
Port 80 443 3128
StartDate
2011-08-10 11:07:10 NaN NaN 10.0
2011-08-10 11:07:40 1.0 1.0 10.0
2011-08-10 11:08:00 NaN 1.0 9.0
2011-08-10 11:08:20 1.0 NaN NaN
df1.plot.bar()