看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
在数据中,有时会存在一些异常极大或极小的值,这会严重影响平均值。去掉最高和最低分可以减少这种影响。今天我们看看如何用 pandas 计算这样的平均值。
我们的数据如下:
import pandas as pd
df = pd.read_csv('https://gairuo.com/file/data/team.csv')
df.head()
'''
name team Q1 Q2 Q3 Q4
0 Liver E 89 21 24 64
1 Arry C 36 37 37 57
2 Ack A 57 60 18 84
3 Eorge C 93 96 71 78
4 Oah D 65 49 61 86
'''
将每个人去掉最高分和最低分,得到平均值,效果如:
'''
name
Liver 44.0
Arry 37.0
Ack 58.5
Eorge 85.5
Oah 63.0
...
Gabriel 66.5
Austin7 30.5
Lincoln4 56.5
Eli 66.0
Ben 42.0
Length: 100, dtype: float64
'''
对 DataFrame df 进行操作,先按'name'列设置索引,然后只选择数值类型的列,最后对每一列应用一个lambda函数求平均值,这个平均值是排除了最大和最小值后计算的。
最终代码如下:
(
df.set_index('name')
.select_dtypes(include='number')
.apply(lambda x: x.sort_values()[1:-1].mean(), axis=1)
)
'''
name
Liver 44.0
Arry 37.0
Ack 58.5
Eorge 85.5
Oah 63.0
...
Gabriel 66.5
Austin7 30.5
Lincoln4 56.5
Eli 66.0
Ben 42.0
Length: 100, dtype: float64
'''
具体分步来看:
df.set_index('name')
.select_dtypes(include='number')
.apply(lambda x: x.sort_values()[1:-1].mean(), axis=1)
x.sort_values()
对Series进行排序[1:-1]
取排序后结果的第2项到倒数第2项,去掉最大和最小值.mean()
计算平均值axis=1
表示按行应用,即每一行(每个人)求一次平均值。综合起来,这段代码可以高效地对DataFrame的每一列求去掉最大最小值后的平均数,实现求“修正平均值”的目的。
这样就完成了需求。
(完)
更新时间:Aug. 18, 2024, 4:17 p.m. 标签:pandas python 平均值