- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用
目录
一,原题力扣链接
二,题干
项目表
Project
:+-------------+---------+ | Column Name | Type | +-------------+---------+ | project_id | int | | employee_id | int | +-------------+---------+ (project_id, employee_id) 是这个表的主键(具有唯一值的列的组合) employee_id 是员工表 Employee 的外键(reference 列) 该表的每一行都表明具有 employee_id 的雇员正在处理具有 project_id 的项目。员工表
Employee
:+------------------+---------+ | Column Name | Type | +------------------+---------+ | employee_id | int | | name | varchar | | experience_years | int | +------------------+---------+ employee_id 是这个表的主键(具有唯一值的列) 该表的每一行都包含一名雇员的信息。编写解决方案,报告在每一个项目中 经验最丰富 的雇员是谁。如果出现经验年数相同的情况,请报告所有具有最大经验年数的员工。
返回结果表 无顺序要求 。
结果格式如下示例所示。
示例 1:
输入: Project 表: +-------------+-------------+ | project_id | employee_id | +-------------+-------------+ | 1 | 1 | | 1 | 2 | | 1 | 3 | | 2 | 1 | | 2 | 4 | +-------------+-------------+ Employee 表: +-------------+--------+------------------+ | employee_id | name | experience_years | +-------------+--------+------------------+ | 1 | Khaled | 3 | | 2 | Ali | 2 | | 3 | John | 3 | | 4 | Doe | 2 | +-------------+--------+------------------+ 输出: +-------------+---------------+ | project_id | employee_id | +-------------+---------------+ | 1 | 1 | | 1 | 3 | | 2 | 1 | +-------------+---------------+ 解释:employee_id 为 1 和 3 的员工在 project_id 为 1 的项目中拥有最丰富的经验。在 project_id 为 2 的项目中,employee_id 为 1 的员工拥有最丰富的经验。
三,建表语句
import pandas as pd
data = [[1, 1], [1, 2], [1, 3], [2, 1], [2, 4]]
project = pd.DataFrame(data, columns=['project_id', 'employee_id']).astype({'project_id':'Int64', 'employee_id':'Int64'})
data = [[1, 'Khaled', 3], [2, 'Ali', 2], [3, 'John', 3], [4, 'Doe', 2]]
employee = pd.DataFrame(data, columns=['employee_id', 'name', 'experience_years']).astype({'employee_id':'Int64', 'name':'object', 'experience_years':'Int64'})
四,分析
题解:
表1:项目表
字段:项目id,员工id
表二:员工表
字段:员工id,员工姓名,员工工作年限
求:报告在每一个项目中 经验最丰富 的雇员是谁 允许并列 不要求排序
第一步 合并两个表
df = pd.merge(employee,project,how='inner',on='employee_id') #内连接连接2个表
df
第二步: 采用分组排序 相当于sql中的 rank_number
第三步:去rn=1的行 映射指定的列 无排序要求 输出结果:
五,Pandas解答
import pandas as pd
def project_employees(project: pd.DataFrame, employee: pd.DataFrame) -> pd.DataFrame:
df = pd.merge(employee,project,how='inner',on='employee_id')
df['rn'] = df.groupby('project_id')['experience_years'].rank(method='min',ascending=False)
df1 = df[df['rn']==1]
df2 = df1[['project_id','employee_id']]
return df2
六,验证
七,知识点总结
- Pandas合并两个表的练习 API:marge
- Pandas分组排序 相当于sql中的 rank_number开窗排序 API练习:groupby....rank....method....ascending
- Pandas过滤的运用
- Pandas映射指定的列
- 学习:知识的初次邂逅
- 复习:知识的温故知新
- 练习:知识的实践应用