寻找Pandas数据框架列的四分位数和十分位数等级

寻找Pandas数据框架列的四分位数和十分位数等级

四分法是指将一个样本分为大小相等、相邻的子组。

中位数是一个四分位数;中位数放在概率分布中,正好有一半的数据低于中位数,一半的数据高于中位数。中位数将一个分布切成两个相等的区域,因此它有时被称为2-四分位数。

四分位数也是定量的,它们将分布分成四个相等的部分。

百分位数是将一个分布分成100个相等的部分的量值,十位数是将一个分布分成10个相等的部分的量值。

我们可以用下面的公式来估计第i个观察值。

ith observation = **q (n + 1)**

其中q是四分位数,即低于你要找的第i个值的比例。

n是数据集中的项目数。

因此,为了找到四分位数排名,q应该是0.25,因为我们想把我们的数据集分成4个相等的部分,并根据它们所处的四分位数从0-3进行排名。

同样,对于十等分等级,q应该是0.1,因为我们希望我们的数据集被划分为10个相等的部分。

在进入Pandas之前,让我们在一个例子中尝试上述概念,以了解我们的量化排名和分位数排名是如何计算的。

样本问题:在以下一组数据中,找出25%的数值低于它,75%的数值高于它的数字。

数据: 32, 47, 55, 62, 74, 77, 86

第一步:将数据从最小到最大排序。题目中的数据已经按升序排列。

第2步:计算你的数据集有多少个观察值。这个特定的数据集有7个项目。

第三步:将任何百分比转换为 “q “的小数。我们要找的是25%的数值低于它的数字,所以把它转换成0.25。

第4步:在公式中插入你的数值。

解答:

第i次观察 = q (n + 1)

第1次观察 = .25(7 + 1) = 2

这组数字中的第2个数字是47,这是25%的数值低于它的数字。然后我们就可以从0-3开始对我们的数字进行排名,因为我们正在寻找四分位数排名。类似于寻找十等分排名的方法,在这种情况下,只是q的值将是0.1。

现在让我们来看看在Pandas中如何快速实现同样的目标。

创建一个数据框架的代码:

# Import pandas
import pandas as pd
 
# Create a DataFrame
df1 = {'Name':['George', 'Andrea', 'John', 'Helen',
             'Ravi', 'Julia', 'Justin'],
       'EnglishScore':[62, 47, 55, 74, 32, 77, 86]}
  
df1 = pd.DataFrame(df1, columns = ['Name', ''])
 
# Sorting the DataFrame in Ascending Order of English Score
df1.sort_values(by =['EnglishScore'], inplace = True)

如果我们打印上述数据框架,我们得到以下结果。

寻找Pandas数据框架列的四分位数和十分位数等级

现在我们可以使用pandas函数qcut()来找到量化等级,方法是传入需要考虑等级的列名,参数q的值表示量化的数目。10表示十等分,4表示四等分,等等,labels = False表示以整数形式返回分层。

以下是量化排名的代码

# code
df1['QuantileRank']= pd.qcut(df1['EnglishScore'],
                             q = 4, labels = False)

现在,如果我们打印数据框架,我们可以看到新的列QauntileRank根据EnglishScore列对我们的数据进行排名。

寻找Pandas数据框架列的四分位数和十分位数等级

同样地,为了计算十等分排名,我们设定q = 10

# code
df1['DecileRank']= pd.qcut(df1['EnglishScore'],
                           q = 10, labels = False)

现在,如果我们打印我们的DataFrame,我们得到以下输出。

寻找Pandas数据框架列的四分位数和十分位数等级

这就是我们如何使用Pandas qcut()方法来计算一列上的各种量纲。

下面给出了上述例子的全部代码。

# code
import pandas as pd
 
# Create a DataFrame
df1 = {'Name':['George', 'Andrea', 'John', 'Helen',
               'Ravi', 'Julia', 'Justin'],
       'EnglishScore':[62, 47, 55, 74, 32, 77, 86]}
  
df1 = pd.DataFrame(df1, columns =['Name', 'EnglishScore'])
 
# Sorting the DataFrame in Ascending Order of English Score
# Sorting just for the purpose of better data readability.
df1.sort_values(by =['EnglishScore'], inplace = True)
 
# Calculating Quantile Rank
df1['QuantileRank']= pd.qcut(df1['EnglishScore'], q = 4, labels = False)
 
# Calculating Decile Rank
df1['DecileRank'] = pd.qcut(df1['EnglishScore'], q = 10, labels = False)
 
# printing the dataframe
print(df1)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程