我有一个非常简单的数据框:
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是第十个值(23之前的9个值和23之后的9个值)
我尝试将1st和3rt四分位数计算为:
df.quantile([.25, .75])
val
0.25 20.0
0.75 23.5
我本来希望从以下9个值中位数得出,第1个四分位数应为19,但是如上所示,python表示为20。 同样,对于第三个四分位数,从右到左的第五个数字是24,但是python显示23.5。
熊猫如何计算四分位数?
答案 0 :(得分:2)
Python不会创建分位数,而Pandas会创建分位数。这里看看文档 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.quantile.html 它实际上使用了numpy的percentile函数 https://docs.scipy.org/doc/numpy/reference/generated/numpy.percentile.html#numpy.percentile
答案 1 :(得分:1)
默认情况下使用线性插值。而是使用最近的方法:
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