python四分位数_四分位数计算以及使用pandas计算

最近学习python数据分析,遇到了四分位数计算问题,因四分位数计算公式不一致,导致结果不一样,坑爹的百度只给了一种计算方法,容易迷惑初学者,故总结如下:

计算方法

三个四分位数的确定:

先按从小到大方法排序,然后使用下列方法。

方法1:n+1法

Q1的位置= (n+1) × 0.25

Q2的位置= (n+1) × 0.5

Q3的位置= (n+1) × 0.75

n表示数据的数据个数。

上面的是大家常用的n+1法。还有一种是n-1法

方法2:n-1法

Q1的位置=1+(n-1)x 0.25

Q2的位置=1+(n-1)x 0.5

Q3的位置=1+(n-1)x 0.75

当位置结果为小数时,则用两个位置上的数分别乘以小数和(1-小数)后相加。例如,当结果为6.25时,就用第六个位置的数*0.25+第七个位置的数*0.75后得到结果。

下面举例说明。

举例1(奇数个)假设有一组数据6,7,15,36,39,40,41,42,43,47,49。此数据已按从小到大顺序拍寻,因此不需要再排序,如未拍寻,需先进行排序。

1、下面根据公式(n+1)法计算

第一四分位数(下四分位数):(11+1)/4 =3,说明它在第三个位置,所以是15,即Q1=15。

中位数:(11+1)/4*2=6,所以是40。

第三四分位数(上四分位数):(11+1)/4*3=9, 所以是43。

至此,Q1=15,Q2=40,Q3=43。

2、下面根据公式(n-1)法计算

第一四分位数(下四分位数):1+(11-1)x 0.25 =3.5,则Q1=15x0.5+36x0.5=25.5

中位数:1+(11-1)x 0.5 =6,则Q2=15x0.5+36x0.5=40

第三四分位数(上四分位数):1+(11-1)x 0.75 =8.5,则Q3=42x0.5+43x0.5=42.5

下面用python实现计算。

1 importpandas as pd2 s1 = pd.Series([6,7,15,36,39,40,41,42,43,47,49])3 s1.describe()

结果如下:

count 11.000000mean33.181818std15.873362min6.000000

25% 25.500000

50% 40.000000

75% 42.500000max49.000000dtype: float64

可见,python运行出来的结果是Q1=25.5 Q2=40 Q3=42.5。

运行结果与n-1法一样,说明python用的是这种方法。

举例2(偶数个)

1 importnumpy as np2 importpandas as pd3 ser_obj=pd.Series([1,2,3,4,5,6])4 ser_obj.describe()

1、下面根据公式(n+1)法计算

第一四分位数(下四分位数):(6+1)/4 =1.75,说明它在第1.75位置,所以是1*0.25+2*0.75,即Q1=1.75。

中位数:(6+1)/4*2=3.5,所以是3*0.5+4*0.5=3.5。

第三四分位数(上四分位数):(6+1)/4*3=5.25, 所以是5*0.75+6*0.25=5.25。

至此,Q1=1.75,Q2=3.5,Q3=5.25。

2、下面根据公式(n-1)法计算

第一四分位数(下四分位数):1+(6-1)x 0.25 =2.25,则Q1=2x0.75+3x0.25=2.25

中位数:1+(6-1)x 0.5 =3.5,则Q2=3x0.5+4x0.5=3.5

第三四分位数(上四分位数):1+(6-1)x 0.75 =4.75,则Q3=4*0.25+5*0.75=4.75

下面用python实现计算。

count 6.000000

mean 3.500000

std 1.870829

min 1.000000

25% 2.250000

50% 3.500000

75% 4.750000

max 6.000000

因此,pandas使用的是n-1法,人们通常使用n+1法。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,可以使用 `groupby()` 和 `transform()` 两个函数来计算数据的上下分位数。 具体方法是,首先使用 `groupby()` 函数按照某个变量对数据进行分组,然后使用 `transform()` 函数对每个分组内的数据进行计算,最后将计算结果返回到原始数据中。 下面是一个示例代码,展示如何使用 `groupby()` 和 `transform()` 函数来计算每个分组内的数据的上下分位数: ``` python import pandas as pd # 创建一个示例数据集 data = pd.DataFrame({'group': ['A', 'A', 'A', 'B', 'B', 'B'], 'value': [1, 2, 3, 4, 5, 6]}) # 使用 groupby() 和 transform() 函数计算每个分组内的数据的上下分位数 q1 = data.groupby('group')['value'].transform(lambda x: x.quantile(q=0.25)) q3 = data.groupby('group')['value'].transform(lambda x: x.quantile(q=0.75)) # 将计算结果添加到原始数据中 data['q1'] = q1 data['q3'] = q3 print(data) ``` 在上面的代码中,首先创建了一个示例数据集 `data`,其中包含两个分组(A和B)的数据。然后使用 `groupby()` 函数按照 `group` 变量对数据进行分组,然后使用 `transform()` 函数计算每个分组内的数据的上下分位数。最后将计算结果添加到原始数据中,并输出结果。 需要注意的是,上述代码中使用了 `lambda` 表达式来计算分位数,这是因为 `quantile()` 函数可以接受一个参数 `q`,用于指定计算哪个分位数。因此,我们可以使用 `lambda` 表达式来传递分位数的值,从而计算上下分位数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值