如何从频率表中计算百分位数?

时间:2016-07-29 10:32:10

标签: python numpy pandas statistics

我有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

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

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

1 个答案:

答案 0 :(得分:2)

好像你想要fr的累积总和。你可以做到

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

那么百分位数是

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