我有一个价格清单,我想为我的垃圾箱创建价格范围,并在该价格落在该价格范围内时为我的垃圾箱建立索引。因此,如果我有:
list_1 = [10.16, 11.13, 15.01, 14.64, 13.8, 14.1, 14.65, 1.36, 1.43, 1.63, 1.7, 2.07]
我想让垃圾桶看起来像这样:
bins
(0.0, 2.5] 5
(2.5, 5.0] 0
(5.0, 7.5] 0
(7.5, 10.0] 0
(10.0, 12.5] 2
(12.5, 15.0] 4
(15.0, 17.5] 1
我希望从那里绘制相同的直方图
答案 0 :(得分:0)
如果您只想绘制直方图,则可以使用以下代码
import matplotlib.pyplot as plt
plt.hist(list1,bins=[0,2.5,5,7.5,10,12.5,15,17.5])
否则,如果您要创建一个具有与频率对应的bin的数据框,则可以按照以下步骤操作:
import pandas as pd
import numpy as np
list1=[10.16, 11.13, 15.01, 14.64, 13.8, 14.1, 14.65, 1.36, 1.43, 1.63, 1.7, 2.07]
binned=pd.cut(np.array(list1),bins=[0,2.5,5,7.5,10,12.5,15,17.5])
'''output: [(10.0, 12.5], (10.0, 12.5], (15.0, 17.5], (12.5, 15.0], (12.5, 15.0], ..., (0.0, 2.5], (0.0, 2.5], (0.0, 2.5], (0.0, 2.5], (0.0, 2.5]]
Length: 12
Categories (7, interval[float64]): [(0.0, 2.5] < (2.5, 5.0] < (5.0, 7.5] < (7.5, 10.0] < (10.0, 12.5] < (12.5, 15.0] < (15.0, 17.5]]'''
df=pd.DataFrame({'value':list1,'bins':binned})
df.groupby('bins')['value'].count()
说明:pandas.cut()帮助我们替换与list1中的值相对应的bin。然后使用“ list1”和“ binned”创建一个数据框。分组“ binned”并计算list1中的频率。
答案 1 :(得分:0)
pandas.cut()
是指定任意边界值并将其分割的一种非常简单的方法。
import pandas as pd
list_1 = [10.16, 11.13, 15.01, 14.64, 13.8, 14.1, 14.65, 1.36, 1.43, 1.63, 1.7, 2.07]
rng = [0,2.5,5.0,7.5,10.0,12.5,15.0,17.5]
label = ['$0.00-$2.50','$2.50-$5.00','$5.00-$7.50','$7.50-$10.00','$10.00-$12.50','$12.50-$15.00','$15.00-$17.5']
data = pd.cut(list_1, rng, labels=label).value_counts()
data
$0.00-$2.50 5
$2.50-$5.00 0
$5.00-$7.50 0
$7.50-$10.00 0
$10.00-$12.50 2
$12.50-$15.00 4
$15.00-$17.50 1
dtype: int64