Table: Employees
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| name | varchar |
+-------------+---------+
employee_id는 이 테이블의 고유한 값을 가진 열입니다. 이 테이블의 각 행은 employee_id에 해당하는 직원의 이름을 나타냅니다.
Table: Salaries
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| salary | int |
+-------------+---------+
employee_id는 이 테이블의 고유한 값을 가진 열입니다. 이 테이블의 각 행은 employee_id에 해당하는 직원의 급여를 나타냅니다.
문제
누락된 정보가 있는 모든 직원의 ID를 보고하는 솔루션을 작성하세요. 직원의 정보가 누락된 경우는 다음과 같습니다:
- 직원의 이름이 누락된 경우, 또는
- 직원의 급여가 누락된 경우.
결과 테이블은 employee_id를 오름차순으로 정렬하여 반환하세요.
결과 형식은 다음 예시와 같습니다.
Example 1:
Input:
Employees table:
+-------------+----------+
| employee_id | name |
+-------------+----------+
| 2 | Crew |
| 4 | Haven |
| 5 | Kristian |
+-------------+----------+
Salaries table:
+-------------+--------+
| employee_id | salary |
+-------------+--------+
| 5 | 76071 |
| 1 | 22517 |
| 4 | 63539 |
+-------------+--------+
Output:
+-------------+
| employee_id |
+-------------+
| 1 |
| 2 |
+-------------+
설명: 직원 1, 2, 4, 5가 이 회사에서 근무하고 있습니다.
직원 1의 이름이 누락되었습니다.
직원 2의 급여가 누락되었습니다.
✏️ 풀이
import pandas as pd
def find_employees(employees: pd.DataFrame, salaries: pd.DataFrame) -> pd.DataFrame:
df_merge = pd.merge(employees, salaries, how='outer', on='employee_id')
return df_merge[df_merge['name'].isna() | df_merge['salary'].isna()][['employee_id']]
📚 개념정리
isna() ? 결측값 확인 메서드 / 결측값이면 True 반환, 정상값이면 False반환
notna() ? 결측값이면 False 반환, 정상값이면 True반환
DataFrame.isna() = isnull() 과 동일
DataFrame.notna() = notnull() 과 동일