[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1075. Project Employees I

잰잰' 2025. 4. 23. 15:29
Table: Project

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| project_id  | int     |
| employee_id | int     |
+-------------+---------+

(project_id, employee_id)는 이 테이블의 기본 키입니다.
employee_id는 Employee 테이블에 대한 외래 키입니다.
이 테이블의 각 행은 employee_id를 가진 직원이 project_id를 가진 프로젝트에서 일하고 있음을 나타냅니다.

Table: Employee

+------------------+---------+
| Column Name      | Type    |
+------------------+---------+
| employee_id      | int     |
| name             | varchar |
| experience_years | int     |
+------------------+---------+

employee_id는 이 테이블의 기본 키입니다. experience_years는 NULL이 아님이 보장됩니다.
이 테이블의 각 행은 한 명의 직원에 대한 정보를 포함합니다.

 

문제

모든 직원의 평균 경력 연수를 각 프로젝트에 대해 2자리로 반올림하여 보고하는 SQL 쿼리를 작성하세요.

결과 테이블은 어떤 순서로 반환해도 됩니다.

쿼리 결과 형식은 다음 예시와 같습니다.

Example 1:

Input: 
Project table:
+-------------+-------------+
| project_id  | employee_id |
+-------------+-------------+
| 1           | 1           |
| 1           | 2           |
| 1           | 3           |
| 2           | 1           |
| 2           | 4           |
+-------------+-------------+
Employee table:
+-------------+--------+------------------+
| employee_id | name   | experience_years |
+-------------+--------+------------------+
| 1           | Khaled | 3                |
| 2           | Ali    | 2                |
| 3           | John   | 1                |
| 4           | Doe    | 2                |
+-------------+--------+------------------+
Output: 
+-------------+---------------+
| project_id  | average_years |
+-------------+---------------+
| 1           | 2.00          |
| 2           | 2.50          |
+-------------+---------------+

설명 : 첫 번째 프로젝트의 평균 경력 연수는 (3 + 2 + 1) / 3 = 2.00이고, 두 번째 프로젝트의 평균 경력 연수는 (3 + 2) / 2 = 2.50입니다.

 

✏️ 풀이

import pandas as pd

def project_employees_i(project: pd.DataFrame, employee: pd.DataFrame) -> pd.DataFrame:
    df = pd.merge(project, employee, how='inner', on='employee_id')

    result = df.groupby('project_id')['experience_years'].mean().reset_index(name='average_years')

    return result

1. project, employee 데이터프레임 merge

2. project_id별로 평균 경력 연수 구하기