[英]how does quantile function works in pandas
我正在使用 pandas 來計算系列的分位數
s = pd.Series([2,4,5,8,10,12,15,19])
print(s.quantile(0.25))
根據我的理解,要計算 0.25 分位數,公式為:
pos = (8+1)*0.25 = 2.25
現在我可以找到這個pos值的兩個解釋:解釋A:pos表示分位數值應該更接近第二個數字,那么分位數值應該是:
q_value = 4 + (5 - 4) * 0.25 = 4.25
解釋B:小數部分表示分位數的25%應該來自第2個數,75%來自第3個數,那么分位數的值應該是:
q_value = 4 * 0.25 + 5 * 0.75 = 4.75
當運行代碼時,結果是 4.75,似乎 pandas 得到基於解釋 B 的分位數值。但是當我將代碼更改為
print(s.quantile(0.3))
返回值為5.3,沒有一個解釋可以得到這個返回值,我現在有點困惑,誰能幫我弄清楚。
首先,根據文檔,用於插值的默認方法是linear
的:
線性:i + (j - i) * fraction,其中 fraction 是由 i 和 j 包圍的索引的小數部分。
我們首先需要找出index
是如何計算的(然后得到它的小數部分):
index = distance_between_first_and_last_element * q
因此,在您的示例中,我們的距離為 7(因為 2 和 19 相隔 7 個位置)。 這將導致:
index = 7 * 0.3 = 2.1
當然,我們只需要保留它的小數部分,也就是0.1
,所以fraction
等於0.1
。
此外,您要求的0.3
分位數介於 5 和 8 之間(這是您列表中的數字),因此它們分別代表i
和j
。
為什么? 因為您的索引是2.1
,介於2
和3
之間,所以:
i = s[2] # which is equal to 5 in your Series
j = s[3] # which is equal to 8 in your Series
所有這些導致:
5 + (8-5) * 0.1
等於:
5.3
按照同樣的邏輯,我們可以計算出0.25
個百分位:
index = 7 * 0.25 # 1.75
fraction = 0.75 # the fractional part of index
i = s[1] # 4
j = s[2] # 5
answer = 4 + (5-4) * 0.75 -> 4.75
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.