2016-07-29 41 views
0

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

似乎你想累積總和fr。你可以做

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

然後百分位數

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