例如,我有一个Pandas DataFrame的测试结果在某个班级.它可能看起来像下面的表格:

Name English French History Math Physic Chemistry Biology
Mike 3 3 4 5 6 5 4
Tom 4 4 3 4 4 5 5
Nina 5 6 4 3 3 3 5
Anna 4 3 4 5 5 3 3
Musa 5 5 4 4 4 6 5
Maria 4 3 5 4 3 2 3
Chris 6 5 5 5 5 5 6

对于每个学生,我要创建at least个具有最佳测试结果和最佳主题的两列.重要提示:每个学生可以有不止一个最好的科目(结果相似)!

对于上面的示例,它应该如下所示:

Name English French History Math Physic Chemistry Biology Best result Best subject 1 Best subject 2
Mike 3 3 4 5 6 5 4 6 Physic None
Tom 4 4 3 4 4 5 5 5 Chemistry Biology
Nina 5 6 4 3 3 3 5 6 French None
Anna 4 3 4 5 5 3 3 5 Math Physic
Musa 5 5 4 4 4 6 5 6 Chemistry None
Maria 4 3 5 4 3 2 3 5 History None
Chris 6 5 5 5 5 5 6 6 English Biology

在Pandas 里做这件事最好的方法是什么?提前谢谢您!

在Pandas 里做这件事最好的方法是什么?提前谢谢您!

推荐答案

另一种可能的解决方案是:

tmp = df.set_index("Name") # a DataFrame
bre = tmp.max(axis=1) # a Series

bsu = (
    ((tmp.columns + "|") @ tmp.eq(bre, axis=0).T)
        .str.strip("|").str.split("|", expand=True)
        .rename(lambda x: f"Best subject {x+1}", axis=1)
    )

out = tmp.assign(**{"Best result": bre}).join(bsu).reset_index()#.fillna("None")

发帖主题:Re:Kolibrios

Name English French History Math Physic Chemistry Biology Best result Best subject 1 Best subject 2
0 Mike 3 3 4 5 6 5 4 6 Physic
1 Tom 4 4 3 4 4 5 5 5 Chemistry Biology
2 Nina 5 6 4 3 3 3 5 6 French
3 Anna 4 3 4 5 5 3 3 5 Math Physic
4 Musa 5 5 4 4 4 6 5 6 Chemistry
5 Maria 4 3 5 4 3 2 3 5 History
6 Chris 6 5 5 5 5 5 6 6 English Biology

Python相关问答推荐

将每个关键字值对转换为pyspark中的Intramame列

如何分割我的收件箱,以便连续的数字各自位于自己的收件箱中?

有没有办法清除气流中的僵尸

带有计数值的Pandas数据帧

从收件箱获取特定列中的重复行

sys.modulesgo 哪儿了?

LAB中的增强数组

滚动和,句号来自Pandas列

在Python中处理大量CSV文件中的数据

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

Python解析整数格式说明符的规则?

在Python中动态计算范围

如何将多进程池声明为变量并将其导入到另一个Python文件

Python+线程\TrocessPoolExecutor

如何启动下载并在不击中磁盘的情况下呈现响应?

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

Flash只从html表单中获取一个值

在输入行运行时停止代码

如何使用OpenGL使球体遵循Python中的八样路径?

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''