Python Pandas - how is 25 percentile calculated by describe function
I think it's easier to understand by seeing this calculation as min+(max-min)*percentile. It has the same result as this function described in NumPy:
linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j
res_25 = 4+(10-4)*percentile = 4+(10-4)*25% = 5.5
res_75 = 4+(10-4)*percentile = 4+(10-4)*75% = 8.5
In the pandas documentation there is information about the computation of quantiles, where a reference to numpy.percentile is made:
Return value at the given quantile, a la numpy.percentile.
Then, checking numpy.percentile explanation, we can see that the interpolation method is set to linear by default:
linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j
For your specfic case, the 25th quantile results from:
res_25 = 4 + (6-4)*(3/4) = 5.5
For the 75th quantile we then get:
res_75 = 8 + (10-8)*(1/4) = 8.5
If you set the interpolation method to "midpoint", then you will get the results that you thought of.
.