我有“参考人口”(例如,v = np.random.rand(100)),我想计算给定集合的百分位数等级(比如,np.array([0.3,0.5,0.7])).
逐个计算很容易:
def percentile_rank(x):
return (v
percentile_rank(0.4)
=> 0.4
np.vectorize(percentile_rank)(np.array([0.3, 0.5, 0.7]))
=> [ 0.33 0.48 0.71]
这会产生预期的结果,但我觉得应该有一个内置的.
我也可以作弊:
pd.concat([pd.Series([0.3, 0.5, 0.7]),pd.Series(v)],ignore_index=True).rank(pct=True).loc[0:2]
0 0.330097
1 0.485437
2 0.718447
这有两个方面很糟糕:
>我不希望测试数据[0.3,0.5,0.7]成为排名的一部分.
>我不想浪费时间计算参考人口的排名.
那么,实现这一目标的惯用方法是什么?