【问题标题】:Window Count and Probability based on range [closed]基于范围的窗口计数和概率[关闭]
【发布时间】:2020-05-17 04:38:06
【问题描述】:

我的数据框中有一个值列。我想按以下方式对值进行分类:

range1=(取值范围为 400-500)

range2=(取值范围为 200-300)

range3=(取值范围为 100-200)

我需要计算与每个范围相对应的值的增量计数,即范围计数及其相应的概率。为了详细说明,我在下面列出了一个示例。

Column Count_range 和 Prob 是我想要计算的

注意:在概率。列,对于第 5 行,值 = 255 对应于 range2,到目前为止,该对应范围的出现次数为 1,到目前为止看到的总行数为 5。 所以,概率=1/5=0.2。 同样,在下一行中,我们看到对应于相同范围的值,因此我们将其范围计数增加到 2,因此现在,prob= 2/6=0.33

【问题讨论】:

    标签: excel pandas series


    【解决方案1】:

    假设您的样本占据了工作表中的 A1:C12 范围,您可以在 B2 和 C2 中使用以下公式。这两个公式都可以复制到工作表的末尾。

    [B2] =MATCH(A2,{1000,500,400,300},-1)-1
    [C2] =COUNTIF(B$2:B2,B2)/COUNT(B$2:B2)
    

    如果计算的值大于 1000,MATCH 函数将返回错误。对于任何 300 或更低的值,它将返回 count-range #3。如果您需要将 300 包含在计数范围 #2 中,请将公式中的数组更改为 {1000,499,399,299}。也可以使用小数,例如 {1000,499.9,399.9,299.9}。

    COUNTIF 范围(如 B$2:B2)会随着您向下复制它们而展开,从绝对且不会更改的 B$2 到 B3、B4、B5 等,从而在 B2 的列顶部创建一个范围到当前行,忽略可能低于公式所在行的所有内容。

    【讨论】:

      【解决方案2】:
      def state(x):
       if x >=100 and x<=200:
          return "Range3"
       if x >=200 and x<=300:
          return "Range2"
       if x >=400 and x<=500:
          return "Range1"
      
       df['state'] = df['Value'].apply(lambda x: state(x))
       df['Count_range'] = df.groupby('state').cumcount()+1
       df['Prob'] =df['Count_range']/(df.index+1)
      

      使用值列上的状态函数定义范围的类别,并在使用 pandas.groupby 按状态对它们进行分组后执行累积计数。最后,得到prob列,将Count_range列的值除以对应的索引,分别得到Averages。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多