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

Dig*_*ogy 7 plot matplotlib 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
Run Code Online (Sandbox Code Playgroud)

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

plt.hist(df.index)
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

JD *_*ong 17

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

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

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

让我们把价格分成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]
Run Code Online (Sandbox Code Playgroud)

所以现在我们有一个包含桶范围的字段.如果你想给这些桶提供其他名称,你可以在优秀的Pandas文档中阅读.现在我们可以使用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
Run Code Online (Sandbox Code Playgroud)

这看起来像赢家......现在让我们绘制它:

 newdf.plot(kind='bar')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述