diff --git a/calculate-special-bonus.py b/calculate-special-bonus.py new file mode 100644 index 0000000..fc02be5 --- /dev/null +++ b/calculate-special-bonus.py @@ -0,0 +1,68 @@ +""" + +Table: Employees + ++-------------+---------+ +| Column Name | Type | ++-------------+---------+ +| employee_id | int | +| name | varchar | +| salary | int | ++-------------+---------+ +employee_id is the primary key (column with unique values) for this table. +Each row of this table indicates the employee ID, employee name, and salary. + + +Write a solution to calculate the bonus of each employee. The bonus of an employee is 100% of their salary if the ID of the employee is an odd number and the employee's name does not start with the character 'M'. The bonus of an employee is 0 otherwise. + +Return the result table ordered by employee_id. + +The result format is in the following example. + + +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 | ++-------------+-------+ +Explanation: +The employees with IDs 2 and 8 get 0 bonus because they have an even employee_id. +The employee with ID 3 gets 0 bonus because their name starts with 'M'. +The rest of the employees get a 100% bonus. + +""" + +# The function calculates a special bonus for employees based on given conditions. +# Employees receive a bonus equal to their salary if their employee ID is odd and their name does not start with 'M'. +# The result is a DataFrame containing employee IDs and their corresponding bonuses, sorted by employee ID. + +import pandas as pd + +def calculate_special_bonus(employees: pd.DataFrame) -> pd.DataFrame: + + employees['bonus'] = employees.apply( + lambda x: x['salary'] if x['employee_id'] % 2 and not x['name'].startswith('M') else 0, + axis=1 + ) + + df = employees[['employee_id', 'bonus']].sort_values('employee_id') + return df + diff --git a/fix-names-in-a-table.py b/fix-names-in-a-table.py new file mode 100644 index 0000000..0a5e0f4 --- /dev/null +++ b/fix-names-in-a-table.py @@ -0,0 +1,52 @@ +""" + +Table: Users + ++----------------+---------+ +| Column Name | Type | ++----------------+---------+ +| user_id | int | +| name | varchar | ++----------------+---------+ +user_id is the primary key (column with unique values) for this table. +This table contains the ID and the name of the user. The name consists of only lowercase and uppercase characters. + + +Write a solution to fix the names so that only the first character is uppercase and the rest are lowercase. + +Return the result table ordered by user_id. + +The result format is in the following example. + + + +Example 1: + +Input: +Users table: ++---------+-------+ +| user_id | name | ++---------+-------+ +| 1 | aLice | +| 2 | bOB | ++---------+-------+ +Output: ++---------+-------+ +| user_id | name | ++---------+-------+ +| 1 | Alice | +| 2 | Bob | ++---------+-------+ + +""" + +# This function capitalizes the first letter of each user's name while keeping the rest lowercase. +# It then sorts the DataFrame based on the 'user_id' column in ascending order. +# The modified DataFrame is returned with the changes applied. + +import pandas as pd + +def fix_names(users: pd.DataFrame) -> pd.DataFrame: + users['name'] = users['name'].str.capitalize() + return users.sort_values(by=['user_id']) + diff --git a/patients-with-a-condition.py b/patients-with-a-condition.py new file mode 100644 index 0000000..0f86567 --- /dev/null +++ b/patients-with-a-condition.py @@ -0,0 +1,56 @@ +""" + +Table: Patients + ++--------------+---------+ +| Column Name | Type | ++--------------+---------+ +| patient_id | int | +| patient_name | varchar | +| conditions | varchar | ++--------------+---------+ +patient_id is the primary key (column with unique values) for this table. +'conditions' contains 0 or more code separated by spaces. +This table contains information of the patients in the hospital. + + +Write a solution to find the patient_id, patient_name, and conditions of the patients who have Type I Diabetes. Type I Diabetes always starts with DIAB1 prefix. + +Return the result table in any order. + +The result format is in the following example. + + + +Example 1: + +Input: +Patients table: ++------------+--------------+--------------+ +| patient_id | patient_name | conditions | ++------------+--------------+--------------+ +| 1 | Daniel | YFEV COUGH | +| 2 | Alice | | +| 3 | Bob | DIAB100 MYOP | +| 4 | George | ACNE DIAB100 | +| 5 | Alain | DIAB201 | ++------------+--------------+--------------+ +Output: ++------------+--------------+--------------+ +| patient_id | patient_name | conditions | ++------------+--------------+--------------+ +| 3 | Bob | DIAB100 MYOP | +| 4 | George | ACNE DIAB100 | ++------------+--------------+--------------+ +Explanation: Bob and George both have a condition that starts with DIAB1. + +""" + +# This function filters patients with conditions containing "DIAB1". +# It selects rows where the "conditions" column starts with "DIAB1" or contains " DIAB1" to avoid partial matches within other words. +# The `regex=False` ensures an exact substring match without using regular expressions. + +import pandas as pd +def find_patients(patients: pd.DataFrame) -> pd.DataFrame: + return patients[patients["conditions"].str.startswith("DIAB1") | patients["conditions"].str.contains(" DIAB1", regex=False)] +