在离散数据上使用numpy的百分位数函数

4
假设某个城镇的房屋销售数字按范围呈现如下:
< $100,000              204
$100,000 - $199,999    1651
$200,000 - $299,999    2405
$300,000 - $399,999    1972
$400,000 - $500,000     872
> $500,000             1455

我想知道给定百分位所在的房价区间。有没有办法使用numpy的percentile函数来实现这个功能?我可以手动完成:

import numpy as np
a = np.array([204., 1651., 2405., 1972., 872., 1455.])
b = np.cumsum(a)/np.sum(a) * 100
q = 75
len(b[b <= q])
4       # ie bin $300,000 - $399,999

但是有没有一种方法可以使用np.percentile呢?

1个回答

2

你差点就做到了:

cs = np.cumsum(a)
bin_idx = np.searchsorted(cs, np.percentile(cs, 75))

至少对于这个案例(以及其他一些具有较大a数组的案例),它并没有更快,尽管如此:

In [9]: %%timeit
   ...: b = np.cumsum(a)/np.sum(a) * 100
   ...: len(b[b <= 75])
   ...:
10000 loops, best of 3: 38.6 µs per loop

In [10]: %%timeit
   ....: cs = np.cumsum(a)
   ....: np.searchsorted(cs, np.percentile(cs, 75))
   ....:
10000 loops, best of 3: 125 µs per loop

所以,除非你想检查多个百分位数,否则建议保持原样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接