在pandas中创建条形图,其中x轴为日期,其他列中的每个值为一条

时间:2017-07-04 07:40:39

标签: python pandas

我有以下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(),但它没有给我我想要的结果。我怎么能这样做?

Ok, not the best drawing, but should give the idea. y-axis is a count, each bar represents the value from the 'Port' column 好吧,不是最好的画,但应该给出这个想法。 y轴是一个计数,每个条形代表来自' Port'柱。在x轴上是第一列的日期

1 个答案:

答案 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()