看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
本例是一个最为常见的办公统计需求,面对一个包含各个科目成绩的学生成绩表,想知道每个学生哪科成绩最好。pandas 的语法方法都可以指定 axis 参数,让计算按行进行,在这个例子中我们会进行讲解。
有这样的一个学生成绩表:
import pandas as pd
df = pd.DataFrame({
'id':['x', 'y', 'z'],
'a':[3,4,2],
'b':[0,5,7],
'c':[1,0,1]}
)
df
'''
id a b c
0 x 3 0 1
1 y 4 5 0
2 z 2 7 1
'''
id 列为学生,a、b、c 列为科目,对应数据为学习成绩,需求希望增加一列,标记该学生哪个成绩最高的科目。
我们可以使用 idxmax() 方法直播按行计算出对应学生的最大成绩的的索引。
我们的最终代码如下:
(
df.set_index('id')
.assign(label=lambda x: x.idxmax(1))
)
'''
a b c label
id
x 3 0 1 a
y 4 5 0 b
z 2 7 1 b
'''
这里要讲解一下 idxmax() 在此例中的用法。
idxmax() 的功能是返回 DataFrame 最大值的标签,默认是沿行方向计算,即每列的最大值的行标签:
df.set_index('id').max()
'''
a 4
b 7
c 1
dtype: int64
'''
df.set_index('id').idxmax()
'''
a y
b z
c x
dtype: object
'''
按当传入 axis=1 会沿列方向进行计算,即每行的最大值的列标签:
df.set_index('id').max(axis=1)
'''
id
x 3
y 5
z 7
dtype: int64
'''
df.set_index('id').idxmax(axis=1)
'''
id
x a
y b
z b
dtype: object
'''
理解这个逻辑,对于我们完成需求很有帮助。
(完)
更新时间:2024-08-18 16:00:41 标签:pandas python 成绩