首页 > 其他分享 >1280. 学生们参加各科测试的次数

1280. 学生们参加各科测试的次数

时间:2023-08-14 14:36:08浏览次数:46  
标签:pd 1280 name 次数 student 各科 id Math subject

1280. 学生们参加各科测试的次数

2023年8月14日12:56:38

1280. 学生们参加各科测试的次数

简单

SQL Schema


Pandas Schema


学生表: Students

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| student_id    | int     |
| student_name  | varchar |
+---------------+---------+
在 SQL 中,主键为 student_id(学生ID)。
该表内的每一行都记录有学校一名学生的信息。

科目表: Subjects

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| subject_name | varchar |
+--------------+---------+
在 SQL 中,主键为 subject_name(科目名称)。
每一行记录学校的一门科目名称。

考试表: Examinations

+--------------+---------+
| Column Name  | Type    |
+--------------+---------+
| student_id   | int     |
| subject_name | varchar |
+--------------+---------+
这个表可能包含重复数据(换句话说,在 SQL 中,这个表没有主键)。
学生表里的一个学生修读科目表里的每一门科目。
这张考试表的每一行记录就表示学生表里的某个学生参加了一次科目表里某门科目的测试。

查询出每个学生参加每一门科目测试的次数,结果按 student_idsubject_name 排序。

查询结构格式如下所示。

示例 1:

输入:
Students table:
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 1          | Alice        |
| 2          | Bob          |
| 13         | John         |
| 6          | Alex         |
+------------+--------------+
Subjects table:
+--------------+
| subject_name |
+--------------+
| Math         |
| Physics      |
| Programming  |
+--------------+
Examinations table:
+------------+--------------+
| student_id | subject_name |
+------------+--------------+
| 1          | Math         |
| 1          | Physics      |
| 1          | Programming  |
| 2          | Programming  |
| 1          | Physics      |
| 1          | Math         |
| 13         | Math         |
| 13         | Programming  |
| 13         | Physics      |
| 2          | Math         |
| 1          | Math         |
+------------+--------------+
输出:
+------------+--------------+--------------+----------------+
| student_id | student_name | subject_name | attended_exams |
+------------+--------------+--------------+----------------+
| 1          | Alice        | Math         | 3              |
| 1          | Alice        | Physics      | 2              |
| 1          | Alice        | Programming  | 1              |
| 2          | Bob          | Math         | 1              |
| 2          | Bob          | Physics      | 0              |
| 2          | Bob          | Programming  | 1              |
| 6          | Alex         | Math         | 0              |
| 6          | Alex         | Physics      | 0              |
| 6          | Alex         | Programming  | 0              |
| 13         | John         | Math         | 1              |
| 13         | John         | Physics      | 1              |
| 13         | John         | Programming  | 1              |
+------------+--------------+--------------+----------------+
解释:
结果表需包含所有学生和所有科目(即便测试次数为0):
Alice 参加了 3 次数学测试, 2 次物理测试,以及 1 次编程测试;
Bob 参加了 1 次数学测试, 1 次编程测试,没有参加物理测试;
Alex 啥测试都没参加;
John  参加了数学、物理、编程测试各 1 次。

通过次数

24.4K

提交次数

49.7K

通过率

49.1%

答案

import pandas as pd

def students_and_examinations(students: pd.DataFrame, subjects: pd.DataFrame, examinations: pd.DataFrame) -> pd.DataFrame:
    students_subjects = students.merge(subjects, how='cross')  # 笛卡尔积
    examinations = examinations.value_counts().reset_index(name='attended_exams')
    return students_subjects.merge(examinations,how="left", on=['student_id', 'subject_name']).fillna(0).sort_values(['student_id', 'subject_name'])[['student_id', 'student_name', 'subject_name', 'attended_exams']]

    # examinations['attended_exams']=0
    # # df=pd.merge(pd.merge(students,subjects,how='cross'),examinations,how='left',on=['student_id','subject_name'])
    # return pd.merge(pd.merge(students,subjects,how='cross'),examinations,how='left',on=['student_id','subject_name']).groupby(['student_id','student_name','subject_name']).count().reset_index()

标签:pd,1280,name,次数,student,各科,id,Math,subject
From: https://www.cnblogs.com/lmq886/p/17628549.html

相关文章

  • 剑指 Offer 43. 1~n 整数中 1 出现的次数
    输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。例如,输入12,1~12这些整数中包含1的数字有1、10、11和12,1一共出现了5次。 示例1:输入:n=12输出:5示例2:输入:n=13输出:6 限制:1<=n< 2^31......
  • 记录一次数据库连接数超限问题(ArcSDE)
    环境:Oracle11.2.0.4RAC集群  ArcGIS10.1问题说明:服务器间歇性的会报连接数超限的问题,经常需要手动释放部分连接才能解决。之前遇到过类似的问题,主要是增大数据库连接数,同时检查死链接的情况,因为修改配置需要重启数据库,所以前期一直手动释放连接,待其他操作再一起重启数据库。......
  • [刷题笔记] Luogu P1280 尼克的任务
    ProblemAnalysis首先,如果一个时间只有一个任务开始,则她必须做。如果一个时间有多个任务开始,她可以选一个去做。我们发现这样的决策是取决于后面的空暇时间,而不是前面。所以在dp的时候需要从后往前搜时间(当然如果从前往后可以跑记搜)考虑转移,如果一个时间有多个任务开始,则选一个......
  • linux设置登录失败处理功能(密码错误次数限制、pam_tally2.so模块)和操作超时退出功能(/e
    原文链接:https://blog.csdn.net/hjxloveqsx/article/details/129004832一、登录失败处理功能策略1、登录失败处理功能策略(服务器终端)(1)编辑系统/etc/pam.d/system-auth文件,在auth字段所在的那一部分添加如下pam_tally2.so模块的策略参数:authrequiredpam_tally2.soonerr=fa......
  • 出现次数超过一半的数
    #include<bits/stdc++.h>usingnamespacestd;intmain(){inta[105]={},n,b;cin>>n;for(inti=1;i<=n;i++){cin>>b;a[b+50]++;}for(inti=-50;i<=50;i++){if(a[i+50]>n/2){......
  • 微信公众号模板消息源码实现,打破服务号群发推送次数限制
    公众号服务号每个月只能群发推送四次文章,我们可以使用模板消息为公众号粉丝推送信息下面是使用golang实现的模板消息发送类库封装,轻松实现模板消息发送wechat.gopackagelibimport("github.com/silenceper/wechat/v2""github.com/silenceper/wechat/v2/cache"......
  • 2023.7.25 将数组和减半的最少操作次数
    贪心,显然每次都削减最大数的一半,可以更快的接近至少削减一半的目标。可以证明,削减任何不是最大数的一半,都不会优于削减最大数的一半,因为题目要求不是正好减少一半,而是至少减少一半。所以可以开一个大根堆存储所有的数,每次取出堆顶的数进行减半,然后将减半后的数插入堆中,并且更新......
  • linux账号登录错误次数过多解锁
    [root@inmnmapp50~]#pam_tally2--userOSS3_JC_BSLoginFailuresLatestfailureFromOSS3_JC_BS32207/20/2317:50:1410.135.7.152[root@inmnmapp50~]#pam_tally2--userOSS3_JC_BS--resetLoginFailuresLatestfai......
  • consul 使用总结 & Nginx 负责均衡,最大连接数据,超时次数,超时等待时间,权重
    consul使用总结&Nginx负责均衡,最大连接数据,超时次数,超时等待时间,权重consulagnet-dev启动consul启动服务,注册服务:dotnetOrderServer.dll--urls="http://:5189"--ip="127.0.0.1“--port=5189dotnetOrderServer.dll--urls="http://:5188"--ip="127.0.0......
  • linux 中实现输出指定列元素的重复次数编号
     001、[root@PC1test01]#lsa.txt[root@PC1test01]#cata.txt##测试数据ERR219543AfricaERR219546kkkkERR229467qqqqERR229468qqqqERR229471mmnnERR219547kkkkERR2214955qqqqERR219544AfricaER......