我有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
但是这段代码非常原始:它没有考虑到百分位数应该在集合的值之间,它不能退一步等。
还有更优雅,通用,现成的解决方案吗?
答案 0 :(得分:2)
好像你想要fr
的累积总和。你可以做到
cumfr = [sum(fr(:i+1)) for i in range(len(fr))]
那么百分位数是
percentile = [100*i/cumfr[-1] for i in cumfr]