【问题标题】:Creating Intervals as Bins将区间创建为 bin
【发布时间】:2020-04-22 03:51:40
【问题描述】:

我有一个价格列表,我想为我的箱子创建价格范围,并在价格落在该价格范围内时索引我的箱子。所以如果我有:

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

从那里,我想绘制一个直方图

【问题讨论】:

    标签: python list histogram


    【解决方案1】:

    如果您只想绘制直方图,可以使用以下代码

      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”创建一个数据框。按“分箱”分组并计算 list1 中的频率。

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-08
        • 1970-01-01
        • 1970-01-01
        • 2012-11-30
        相关资源
        最近更新 更多