Python pandas中众数与分位数的计算方法详解

Elena
Elena
发布时间:2026-10-14 | 4人浏览过
原创

本文详细介绍Python pandas库中众数(mode)和分位数(quantile)的计算方法。通过具体代码示例,演示如何对全表、单行、单列及多行多列进行众数和分位数统计,并对比pandas的quantile与numpy的percentile在分组计算中的差异与用法。

准备工作

本文所使用的示例数据表格如下所示:

首先查看原始数据的状态:


import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df)

运行结果如下:

数学成绩 语文成绩 英语成绩 0 89 78 98 1 35 34 34 2 43 56 25 3 35 78 83 4 67 46 65 5 89 89 83 6 96 45 83 7 35 67 45 8 35 78 83

1. 计算众数

1.1 针对整个数据表的操作

1.1.1 计算每一列的众数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.var())

运行结果如下:

数学成绩 语文成绩 英语成绩 0 35 78 83

1.1.2 计算每一行的众数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.mode(axis=1))

运行结果如下:

0 1 2 0 78.0 89.0 98.0 1 34.0 NaN NaN 2 25.0 43.0 56.0 3 35.0 78.0 83.0 4 46.0 65.0 67.0 5 89.0 NaN NaN 6 45.0 83.0 96.0 7 35.0 45.0 67.0 8 35.0 78.0 83.0

1.2 针对单独某一行或某一列的操作

1.2.1 计算单独某一列的众数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.mode(axis=1))

运行结果如下:

0 35 dtype: int64

1.2.2 计算单独某一行的众数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.iloc[[0]].mode())

运行结果如下:

数学成绩 语文成绩 英语成绩 0 89 78 98

1.3 针对多行或多列的操作

1.3.1 计算多列的众数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[['数学成绩', "语文成绩"]].mode())

运行结果如下:

数学成绩 语文成绩 0 35 78

1.3.2 计算多行的众数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.iloc[[0, 1]].mode())

运行结果如下:

数学成绩 语文成绩 英语成绩 0 35 34 34 1 89 78 98

2. 计算分位数

分位数是一种基于位置更细致的统计指标,相比中位数提供了更多信息。常见的分位数包括四分之一分位数(25%)、二分之一分位数(即中位数,50%)以及四分之三分位数(75%)。

2.1 计算不同分位点的分位数

2.1.1 计算四分之一分位数


import pandas as pd
​
df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.quantile(0.25))

运行结果如下:

数学成绩 35.0 语文成绩 46.0 英语成绩 45.0 Name: 0.25, dtype: float64

2.1.2 计算四分之三分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.quantile(0.75))

运行结果如下:

数学成绩 89.0 语文成绩 78.0 英语成绩 83.0 Name: 0.75, dtype: float64

2.2 针对整个数据表的操作

2.2.1 计算每一列的分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.quantile(0.25))

运行结果如下:

数学成绩 35.0 语文成绩 46.0 英语成绩 45.0 Name: 0.25, dtype: float64

2.2.2 计算每一行的分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.quantile(0.25, axis=1))

运行结果如下:

0 83.5 1 34.0 2 34.0 3 56.5 4 55.5 5 86.0 6 64.0 7 40.0 8 56.5 Name: 0.25, dtype: float64

2.3 针对单独一行或一列的操作

2.3.1 计算某一列的分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df['数学成绩'].quantile(0.25))

运行结果如下:

35.0

2.3.2 计算某一行的分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.iloc[[0]].quantile(0.25))

运行结果如下:

数学成绩 89.0 语文成绩 78.0 英语成绩 98.0 Name: 0.25, dtype: float64

2.4 针对多行或多列的操作

2.4.1 计算多列的分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df[['数学成绩', "语文成绩"]].quantile(0.25))

运行结果如下:

数学成绩 35.0 语文成绩 46.0 Name: 0.25, dtype: float64

2.4.2 计算多行的分位数


df = pd.read_excel(r'C:\Users\admin\Desktop\测试.xlsx')
print(df.iloc[[0, 1]].quantile(0.25))

运行结果如下:

数学成绩 48.5 语文成绩 45.0 英语成绩 50.0 Name: 0.25, dtype: float64

附录:pandas与numpy计算分位数的区别

pandas和numpy库均提供了计算分位数的功能,其中pandas使用quantile方法,而numpy使用percentile方法。

这两种方法在计算原理上基本一致,主要区别在于用法。quantile的一个显著优势是可以与pandas中的groupby函数结合使用,从而方便地计算每个分组内的特定分位数。

使用quantile的代码示例如下:


import pandas as pd
import numpy as np
data = pd.read_csv('order_rank_p_0409.txt',sep='\t')
#将data按id_1 和 id_2 分组
grouped=data.groupby(['id_1','id_2'])
#用quantile计算第40%的分位数
grouped['gmv'].quantile(0.4) 
#用to_csv生成文件
x.to_csv('order_ran_re.txt',sep= '\t')

使用percentile的代码示例如下:


import pandas as pd
import numpy as np
data = pd.read_csv('order_rank_p_0409.txt',sep='\t')
a = array(data['gmv'])
np.percentile(a,0.4)

尽管代码写法不同,但两种方法计算得出的结果是相同的。

总结

至此,关于Python pandas中众数和分位数的介绍已完成。如需了解更多pandas众数和分位数相关内容,请查阅本站过往文章或继续阅读后续教程。感谢大家的支持!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表