寻找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函数qcut()来找到量化等级,方法是传入需要考虑等级的列名,参数q的值表示量化的数目。10表示十等分,4表示四等分,等等,labels = False表示以整数形式返回分层。
以下是量化排名的代码
# code
df1['QuantileRank']= pd.qcut(df1['EnglishScore'],
q = 4, labels = False)
现在,如果我们打印数据框架,我们可以看到新的列QauntileRank根据EnglishScore列对我们的数据进行排名。
同样地,为了计算十等分排名,我们设定q = 10
# code
df1['DecileRank']= pd.qcut(df1['EnglishScore'],
q = 10, labels = False)
现在,如果我们打印我们的DataFrame,我们得到以下输出。
这就是我们如何使用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)