如何找到分位数的索引

5

我是一个pandas系列的用户,我想找到代表分位数的索引值。

假设我有:

np.random.seed(8)
s = pd.Series(np.random.rand(6), ['a', 'b', 'c', 'd', 'e', 'f'])
s

a    0.873429
b    0.968541
c    0.869195
d    0.530856
e    0.232728
f    0.011399
dtype: float64

并且执行

s.quantile(.5)

我明白了

0.70002511588475946

我想知道的是表示该分位数值前一个点的标签索引值是多少。在这种情况下,我知道索引值应该是标签。
2个回答

7
如果将interpolation参数设置为'lower''higher''nearest',那么问题可以更简单地解决:
s[s == s.quantile(.5, interpolation='lower')]

我猜这种方法比piRSquared的解决方案要快得多。


5
使用sort_values,反转顺序,找到所有小于等于计算出的分位数的值,然后找到idxmax
(s.sort_values()[::-1] <= s.quantile(.5)).idxmax()

或者:

(s.sort_values(ascending=False) <= s.quantile(.5)).idxmax()

我们可以将其函数化:
def idxquantile(s, q=0.5, *args, **kwargs):
    qv = s.quantile(q, *args, **kwargs)
    return (s.sort_values()[::-1] <= qv).idxmax()

idxquantile(s)

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