[코딩테스트]/[Pandas]
[LeetCode - Pandas] (Medium) 176. Second Highest Salary
잰잰'
2025. 5. 13. 19:44
Table: Employee
+-------------+------+
| Column Name | Type |
+-------------+------+
| id | int |
| salary | int |
+-------------+------+
id는 이 테이블의 기본 키(고유한 값을 갖는 열)입니다.
이 테이블의 각 행은 직원의 급여에 대한 정보를 포함하고 있습니다.
문제
Employee 테이블에서 두 번째로 높은 서로 다른 급여를 찾는 솔루션을 작성하세요.
두 번째로 높은 급여가 없으면 null을 반환하세요 (Pandas에서는 None을 반환하세요).
결과 형식은 다음 예시와 같습니다.
Example 1:
Input:
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
| 2 | 200 |
| 3 | 300 |
+----+--------+
Output:
+---------------------+
| SecondHighestSalary |
+---------------------+
| 200 |
+---------------------+
Example 2:
Input:
Employee table:
+----+--------+
| id | salary |
+----+--------+
| 1 | 100 |
+----+--------+
Output:
+---------------------+
| SecondHighestSalary |
+---------------------+
| null |
+---------------------+
✏️ 풀이
import pandas as pd
def second_highest_salary(employee: pd.DataFrame) -> pd.DataFrame:
unique_salary = employee[['salary']].drop_duplicates()
unique_salary['rnk'] = unique_salary['salary'].rank(ascending=False)
result = unique_salary[unique_salary['rnk'] == 2][['salary']].rename(columns={'salary' : 'SecondHighestSalary'})
if result.empty :
return pd.DataFrame({'SecondHighestSalary': [None]})
return result
1. 서로 다른 급여를 찾기 위해 중복값 삭제
2. 급여 순위 매기기
3. 순위가 2등인 급여 찾기
4. 없을 경우 Null값 리턴
5. 4번에 해당하지 않을 경우 2등인 급여 리턴
주의할점
unique_salary = employee[['salary']].drop_duplicates() 코드를 처음엔
unique_salary = employee['salary'].drop_duplicates() 로 써서 에러가 났다
[] 하나만 쓸 경우 Series 타입으로 반환하기 때문에 새로운 열을 추가 할 수 없다
새로운 열을 추가하려면 [[]] 으로 데이터프레임 타입으로 반환하자