将间隔创建为垃圾箱

时间:2020-04-22 03:51:40

标签: python list histogram

我有一个价格清单,我想为我的垃圾箱创建价格范围,并在该价格落在该价格范围内时为我的垃圾箱建立索引。因此,如果我有:

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

我希望从那里绘制相同的直方图

2 个答案:

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