基于范围的窗口计数和概率[关闭]

问题描述 投票:-1回答:2

我在数据框中有一个值列。我想将值分类在一定范围内。例如:

range1 =(值在400-500之间)

range2 =(值在200-300之间)

range3 =(值范围从100-200)

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

注:在概率中。列,对于第5行,值255对应于range2,并且对于该对应范围,到目前为止看到的出现次数是1,并且到目前为止看到的总行数是5。因此,prob = 1/5 = 0.2。

类似地,在下一行中,我们看到对应于相同范围的值,因此我们将其范围计数增加到2,因此现在,prob = 2/6 = 0.33

[列计数范围和概率是我要计算的

enter image description here

excel pandas series
2个回答
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或更低的值,它将返回计数范围#3。如果需要将300包含在计数范围#2中,请将公式中的数组更改为{1000,499,399,299}。也可以使用小数,例如{1000,499.9,399.9,299.9}。

COUNTIF范围如B $ 2:B2会随着您的复制而扩展,从绝对的B $ 2(不会改变)到B3,B4,B5等,从而从B2列顶部到当前行,而忽略公式所在行下方的所有内容。


0
投票
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按状态对它们进行分组后,执行累积计数。最后,要获得概率列,请将Count_range列值除以相应的索引,分别获得平均值。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.