如何找到 pandas 中每个数字的分位数值

How to find the quantile value of each number in pandas

我有以下代码生成具有随机值的 df:

import pandas as pd
import numpy as np
random_data = np.random.randint(10, 25, size=20)
df = pd.DataFrame(random_data, columns=['RANDOM VALUES'])
df.index.name = 'foo'
print(df)

这将产生:

     RANDOM VALUES
foo               
0               15
1               20
2               17
3               21
4               23
5               20
6               23
7               22
8               22
9               21
10              23
11              17
12              12
13              17
14              17
15              24
16              13
17              20
18              14
19              22

要找到 say quantile(0.5)

的分位数值
df['RANDOM VALUES'].quantile(0.5)

反过来怎么办?例如创建一个包含每个数字的分位数值的列?

您可以使用 scipy.stats 模块中的 percentileofscore 函数。参考documentation正确使用kind参数:

import scipy.stats as stats

df["RANDOM VALUES"].apply(lambda x: stats.percentileofscore(df["RANDOM VALUES"],
                                                             x, kind = 'weak'))