【问题标题】:How to compute percentiles from frequency table?如何从频率表中计算百分位数?
【发布时间】:2016-12-04 00:58:34
【问题描述】:

我有 CSV 文件:

fr id
 1 10000152
 1 10000212
 1 10000847
 1 10001018
 2 10001052
 2 10001246
14 10001908
...........

这是一个频率表,其中id 是整数变量,fr 是给定值的出现次数。文件按值升序排序。 我想计算变量的百分位数(即 90%、80%、70% ... 10%)。

我是在纯 Python 中完成的,类似于这个伪代码:

bucket=sum(fr)/10.0
percentile=1
sum=0
for (current_fr, current_id) in zip(fr,id):
   sum=sum+current_fr
   if (sum > percentile*bucket):
      print "%i percentile: %i" % (percentile*10,current_id)
      percentile=percentile+1

但是这段代码非常原始:它没有考虑百分位应该在集合中的值之间,它不能后退等等。

还有更优雅、通用、现成的解决方案吗?

【问题讨论】:

    标签: python numpy pandas statistics


    【解决方案1】:

    您似乎想要fr 的累积总和。你可以这样做

    cumfr = [sum(fr[:i+1]) for i in range(len(fr))]
    

    那么百分位数是

    percentile = [100*i/cumfr[-1] for i in cumfr]
    

    【讨论】:

    • 这是一个很好的答案,但解释有限。如果给出更好的解释,它可能会帮助更多的人。此外,我无法将 fr(:i+1) 更正为 fr[:i+1]。有权更改少于 6 个字符的人可以进行更改吗? Python 抛出的错误在运行代码时具有误导性。
    猜你喜欢
    • 1970-01-01
    • 2014-01-17
    • 2023-03-30
    • 2013-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 2019-02-16
    • 2016-10-04
    相关资源
    最近更新 更多