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

В этом посте:

Как панды вычисляют квартили?

Это объяснение работы функции quantile (), данное @perl:

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, то index = ceil (index)
  • если индекс десятичная дробь == 0.50, то значение = int (index) +0.5
person Mamun Or Rashid    schedule 10.10.2020