关于Pandas版本: 本文基于 pandas2.2.0 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
传送门: Pandas API参考目录
传送门: Pandas 版本更新及新特性
传送门: Pandas 由浅入深系列教程
Series.quantile
方法用于返回 Series
行或列的分位数。
⚠️ 注意 :
- 缺失值 不会参与计算。例如[2, 4, 6, 8, pd.NA],元素数量 n = 4 n=4 n=4
Series.quantile
所用计算公式,不同于【普通高中教科书 人教版2022年7月第4次印刷 数学B版 必须 第二册】第65页学到的方法。如果你需要使用教科书上的方法,则需要自己写函数。
Series.quantile(q=0.5, interpolation=‘linear’)
Series
。float
。q : float or array-like, default 0.5 (50% quantile) 例1
q
参数,用于指分位,取值范围 0 <= q <= 1
,默认 q=0.5
即计算 50% 分位数(中位数)。 该参数接受以下类型的传入:
interpolation : {‘linear’, ‘lower’, ‘higher’, ‘midpoint’, ‘nearest’}
interpolation
参数,用于控制当 p o s pos pos 不是整数时的取值方法,默认 interpolation=‘linear’
使用线性插值法:例2
⚠️ 分位数线性插值法 :
在数组 x x x 求分位数,分为两个步骤:
- 求位置 p o s pos pos: 将数组从小到大排列,定位到数组的 p % p\% p% 位置。
- p o s = 1 + ( n − 1 ) ⋅ p % pos = 1 + (n - 1) \cdot p\% pos=1+(n−1)⋅p%
- 其中, p o s pos pos 是分位数在数组中的位置, n n n 是元素总数量, p % p\% p% 是分位点。
- 求分位数 Q p Q_{p} Qp: 在 p o s pos pos 位置取值。
- 如果 p o s pos pos 是整数: Q p = x p o s Q_{p} = x_{pos} Qp=xpos
- 如果 p o s pos pos 不是整数:
- 设 i i i 为小于 p o s pos pos 的最小整数, j j j 为大于 p o s pos pos 的最小整数, δ δ δ 为 p o s pos pos 的小数部分
- $Q_{p} = {x_i} + ({x_j} - {x_i}) \cdot δ $
➡️ 相关方法
DataFrame.quantile
分位数
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
例1-1、创建演示数据
import pandas as pd
s = pd.Series([2, 4, 6, 8, pd.NA])
s
0 2
1 4
2 6
3 8
4
dtype: object
例1-2、只计算25%分位数(第一四分位数)
s.quantile(q=0.25)
第1组数据 3.5
第2组数据 4.0
Name: 0.25, dtype: object
注意观察计算结果,但是在计算过程中,并没有被计算到元素数量 n n n
例1-3、同时计算25%分位数(第一四分位数)和50%分位数(中位数)
s.quantile(q=[0.25, 0.5])
0.25 3.5
0.50 5.0
dtype: object
例2-1、默认 interpolation=‘linear’
使用线性插值法
import pandas as pd
s2 = pd.Series([1, 2, 3, 4])
s2.quantile([0.25, 0.5])
0.25 1.75
0.50 2.50
dtype: float64
例2-2、使用平均值插值法
s2.quantile([0.25, 0.5], interpolation='midpoint')
0.25 1.5
0.50 2.5
dtype: float64