我在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轴?现在它只是一个规模"。
谢谢!
答案 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')