Как функционира функцията pandas quantile() вътрешно?

В тази публикация:

Как pandas изчислява квартили?

Това е обяснението, дадено от @perl за работата на функцията quantile():

df = pd.DataFrame([5,7,10,15,19,21,21,22,22,23,23,23,23,23,24,24,24,24,25], columns=['val'])

Нека разгледаме 0,25 (същата логика с 0,75, разбира се): номерът на елемента трябва да бъде (len(df)-1)*0.25 = (19 - 1)*0.25 = 4.5, така че сме между елемент 4 (който е 19 -- започваме да броим от 0) и елемент 5 (който е 21). И така, имаме i = 19, j = 21, дроб = 0,5 и i + (j - i) * дроб = 20

Все още не мога да разбера как работи функцията quantile().

Всички формули за квантили предполагат, че трябва да вземем q * (n+1), където q е квантилът, който трябва да се изчисли. Въпреки това, в обяснението от @perl, използваната формула е q*(n-1). Защо (n-1) вместо (n+1)?

Второ, защо дробта 0,5 се използва от @perl?

Има ли някаква разлика в метода за изчисляване на квантила, ако общите точки от данни са четни или нечетни?*

ако вземем два кадъра с данни:

df1 = pd.DataFrame([2,4,6,8,10,12]) # n=6 (even)

df2 = pd.DataFrame([1,3,5,7,9]) # n=5 (odd)

техните съответни квантили са както в (приложената снимка) квантилна диаграма:

Не мога да разбера как се изчисляват квантилите в горните два случая.

q -> df1 -> df2

0.2 -> 4.0 -> 2.6

0.25 -> 4.5 -> 3.0

0.5 -> 7.0 -> 5.0

0.75 -> 9.5 -> 7.0

0.8 -> 10.0 -> 7.4

Може ли някой да обясни, моля? Ще бъда много благодарен.

Благодаря предварително.

Винеет


person vineet    schedule 21.05.2019    source източник


Отговори (1)


Не съм сигурен, но можете да опитате това.

0 <= q <= 1

df = pd.DataFrame([1,3,5,7,9], columns=['val'])

df.quantile(0.25)

output: val 3.0

Обяснение: n=5, q = 0,25. Тъй като използвах q = 0,25, тогава можем да използваме index = n/4 = 1.25

Condition for index:

  • ако индексът е десетична дроб като 0,25 ‹ 0,50, тогава индекс = етаж (индекс)
  • ако индекс десетична дроб › 0,50, тогава индекс = ceil(индекс)
  • ако индексът е десетична дроб == 0,50, тогава стойност = int(index)+0,5
person Mamun Or Rashid    schedule 10.10.2020