大熊猫绘图直方图数据帧索引

时间:2014-11-26 19:37:17

标签: matplotlib pandas plot

我在pandas中有以下数据框(df):

       NetPrice  Units  Royalty
Price                       
3.65    9.13    171    57.60
3.69    9.23     13     4.54
3.70    9.25    129    43.95
3.80    9.49    122    42.76
3.90    9.74    105    38.30
3.94    9.86    158    57.35
3.98    9.95     37    13.45
4.17   10.42     69    27.32
4.82   12.04    176    77.93
4.84   24.22    132    59.02
5.16   12.91    128    60.81
5.22   13.05    129    62.00

我正在尝试在索引(" Price)上创建一个直方图,其y轴为"单位" 。我从以下开始:

plt.hist(df.index)

这给了我一个绘制价格的直方图。如何将单位添加到y轴?现在它只是一个规模"。

谢谢!

1 个答案:

答案 0 :(得分:16)

由于您的数据已经部分汇总,因此无法直接使用hist()方法。就像@snorthway在评论中所说,你可以用条形图来做到这一点。只有您需要先将数据放入存储桶中。我最喜欢将数据放入存储桶的方法是使用pandas cut()方法。

让我们设置一些示例数据,因为您没有提供一些易于使用的数据:

np.random.seed(1)
n = 1000
df = pd.DataFrame({'Price' : np.random.normal(5,2,size=n),
                   'Units' : np.random.randint(100, size=n)})

让我们把价格分成10个均匀分布的桶:

df['bucket'] = pd.cut(df.Price, 10)
print df.head()

      Price  Units           bucket
0  8.248691     98    (7.307, 8.71]
1  3.776487      8  (3.0999, 4.502]
2  3.943656     89  (3.0999, 4.502]
3  2.854063     27  (1.697, 3.0999]
4  6.730815     29   (5.905, 7.307]

所以现在我们有一个包含铲斗范围的字段。如果你想给这些桶提供其他名称,你可以在优秀的Pandas documentation中阅读。现在我们可以使用Pandas groupby()方法和sum()来添加单位:

newdf = df[['bucket','Units']].groupby('bucket').sum()
print newdf
                  Units
bucket                 
(-1.122, 0.295]     492
(0.295, 1.697]     1663
(1.697, 3.0999]    5003
(3.0999, 4.502]   11084
(4.502, 5.905]    15144
(5.905, 7.307]    11053
(7.307, 8.71]      4424
(8.71, 10.112]     1008
(10.112, 11.515]     77
(11.515, 12.917]    122

这看起来像是一个胜利者......现在让我们绘制它:

 newdf.plot(kind='bar')

enter image description here