From 345eddd378f6da3e2adbcbbaef3e05630644ff88 Mon Sep 17 00:00:00 2001 From: akanksha-vishwak Date: Sat, 14 Jun 2025 10:58:14 +0200 Subject: [PATCH] solution to both the problems --- 01-DepartmentHighestSalary.py | 23 +++++++++++++++++++++++ 02-RankScores.py | 8 ++++++++ 2 files changed, 31 insertions(+) create mode 100644 01-DepartmentHighestSalary.py create mode 100644 02-RankScores.py diff --git a/01-DepartmentHighestSalary.py b/01-DepartmentHighestSalary.py new file mode 100644 index 0000000..505ddde --- /dev/null +++ b/01-DepartmentHighestSalary.py @@ -0,0 +1,23 @@ +# Problem 1: Department Highest Salary (https://leetcode.com/problems/department-highest-salary/) + +import pandas as pd + +# solution 1 using groupby and merge +def department_highest_salary(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame: + max_salary = employee.groupby('departmentId')['salary'].max().reset_index() + result = pd.merge(max_salary, employee) + output = pd.merge(result, department, left_on=['departmentId'], right_on=['id']) + return output[['name_y', 'name_x', 'salary']].rename(columns={'name_y':'Department', 'name_x':'Employee', 'salary':'Salary'}) + +# solution 2 using transform and merge +def department_highest_salary(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame: + df = pd.merge(employee, department, left_on='departmentId', right_on='id') + max_salary = df.groupby('departmentId')['salary'].transform('max') + df = df[df['salary']==max_salary] + return df[['name_y', 'name_x', 'salary']].rename(columns={'name_y':'Department', 'name_x':'Employee', 'salary':'Salary'}) + +""" +Note: +- transform returns a series (it is like partition by in SQL), so it returns the same number of rows as the original DataFrame. +- the default merge is an inner join, so it is fine to omit how='inner', it will only return the rows that have matching values in both DataFrames. +""" \ No newline at end of file diff --git a/02-RankScores.py b/02-RankScores.py new file mode 100644 index 0000000..93465e0 --- /dev/null +++ b/02-RankScores.py @@ -0,0 +1,8 @@ +# Problem 2: Rank Scores (https://leetcode.com/problems/rank-scores/) + +import pandas as pd + +# solution 1 using rank +def order_scores(scores: pd.DataFrame) -> pd.DataFrame: + scores['rank'] = scores['score'].rank(method='dense', ascending=False) + return scores[['score', 'rank']].sort_values(by='score', ascending=False) \ No newline at end of file