簡體   English   中英

分位數 function 如何在 pandas 中工作

[英]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 之間(這是您列表中的數字),因此它們分別代表ij

為什么? 因為您的索引是2.1 ,介於23之間,所以:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM