Как панды рассчитывают квартили? - PullRequest
0 голосов
/ 05 марта 2019

У меня очень простой фрейм данных:

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

df.median () = 23, что верно, поскольку из 19 значений в списке 23 является 10-м значением (9 значений до 23 и 9 значений после 23)

Я пытался вычислить 1-й и 3-й квартили как:

df.quantile([.25, .75])

         val
0.25    20.0
0.75    23.5

Я бы ожидал, что из 9 значений ниже медианы 1-й квартиль должен быть 19, но, как вы можете видеть выше, Python говорит, что это 20. Аналогично, для 3-го квартиля пятое число справа налево равно 24, но python показывает 23,5.

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

Оригинальный вопрос по следующей ссылке: https://www.khanacademy.org/math/statistics-probability/summarizing-quantitative-data/box-whisker-plots/a/identifying-outliers-iqr-rule

Ответы [ 2 ]

2 голосов
/ 05 марта 2019

Питон не создает квантиль, Панда делает. Вот посмотрите на документацию https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.quantile.html Это на самом деле использует процентиль функции Numpy https://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html#numpy.percentile

1 голос
/ 05 марта 2019

По умолчанию используется линейная интерполяция. Вот как использовать вместо ближайшего:

df['val'].quantile([0.25, 0.75], interpolation='nearest')

Out:
0.25    19
0.75    24

Более подробная информация из официальной документации о том, как работает параметр interpolation:

    This optional parameter specifies the interpolation method to use,
    when the desired quantile lies between two data points `i` and `j`:

    * linear: `i + (j - i) * fraction`, where `fraction` is the
      fractional part of the index surrounded by `i` and `j`.
    * lower: `i`.
    * higher: `j`.
    * nearest: `i` or `j` whichever is nearest.
    * midpoint: (`i` + `j`) / 2.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.quantile.html

...