Table: Employees
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| employee_id | int |
| name | varchar |
| salary | int |
+-------------+---------+
employee_id는 이 테이블의 기본 키(고유한 값을 가진 열)입니다.
이 테이블의 각 행은 직원 ID, 직원 이름, 급여를 나타냅니다.
문제
각 직원의 보너스를 계산하는 솔루션을 작성하세요. 직원의 보너스는 다음 조건에 따라 계산됩니다.
- 직원의 ID가 홀수이고, 직원의 이름이 'M'으로 시작하지 않으면 보너스는 급여의 100%입니다.
- 그 외의 경우에는 보너스가 0입니다.
결과 테이블은 employee_id를 기준으로 정렬하여 반환하세요.
결과 형식은 다음 예시와 같습니다.
Example 1:
Input:
Employees table:
+-------------+---------+--------+
| employee_id | name | salary |
+-------------+---------+--------+
| 2 | Meir | 3000 |
| 3 | Michael | 3800 |
| 7 | Addilyn | 7400 |
| 8 | Juan | 6100 |
| 9 | Kannon | 7700 |
+-------------+---------+--------+
Output:
+-------------+-------+
| employee_id | bonus |
+-------------+-------+
| 2 | 0 |
| 3 | 0 |
| 7 | 7400 |
| 8 | 0 |
| 9 | 7700 |
+-------------+-------+
설명 : 직원 ID가 2와 8인 직원은 employee_id가 짝수이므로 보너스가 0입니다. 직원 ID가 3인 직원은 이름이 'M'으로 시작하므로 보너스가 0입니다. 그 외의 직원들은 급여의 100%를 보너스로 받습니다.
✏️ 풀이
import pandas as pd
def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame:
employees.loc[(employees['employee_id'] % 2 == 0) | (employees['name'].str.startswith('M')), 'salary'] = 0
employees.rename(columns={'salary' : 'bonus'}, inplace=True)
return employees[['employee_id', 'bonus']].sort_values(by='employee_id')
📚 개념정리
loc() ? 원하는 행/열 불러오기
df.loc[행 인덱싱 값, 열 인덱싱 값]
startswith() ? 원하는 문자열 로 시작하는 데이터 검색
df[df['컬럼명'].str.startswith('원하는 문자열')]
sort_values() ? 데이터 정렬
df.sort_values(by, axis=0, ascending=True, inplace=False)
by : 정렬 기준이 될 컬럼
axis : 0 = index / 1 = columns 정렬할 레이블 설정
ascending : 오름차순, 내림차순 정렬
inplace : 원본 수정 여부