[코딩테스트]/[Pandas]

[LeetCode - Pandas) (Easy) 183. Customers Who Never Order

잰잰' 2025. 5. 8. 14:42
Table: Customers

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| id          | int     |
| name        | varchar |
+-------------+---------+

이 테이블에서 id는 기본 키(고유 값이 있는 열)입니다.
이 테이블의 각 행은 고객의 ID와 이름을 나타냅니다.

Table: Orders

+-------------+------+
| Column Name | Type |
+-------------+------+
| id          | int  |
| customerId  | int  |
+-------------+------+

이 테이블에서 id는 기본 키(고유 값이 있는 열)입니다.
customerId는 Customers 테이블의 id를 참조하는 외래 키(참조 열)입니다.
이 테이블의 각 행은 주문의 ID와 해당 주문을 한 고객의 ID를 나타냅니다.'

 

문제

아무 것도 주문하지 않은 모든 고객을 찾는 해결책을 작성하십시오.

결과 테이블은 임의의 순서로 반환될 수 있습니다.

결과 형식은 아래 예시와 같습니다.

Example 1:

Input: 
Customers table:
+----+-------+
| id | name  |
+----+-------+
| 1  | Joe   |
| 2  | Henry |
| 3  | Sam   |
| 4  | Max   |
+----+-------+
Orders table:
+----+------------+
| id | customerId |
+----+------------+
| 1  | 3          |
| 2  | 1          |
+----+------------+
Output: 
+-----------+
| Customers |
+-----------+
| Henry     |
| Max       |
+-----------+

 

✏️ 풀이

import pandas as pd

def find_customers(customers: pd.DataFrame, orders: pd.DataFrame) -> pd.DataFrame:
    df = pd.merge(customers, orders, how='left', left_on = 'id', right_on = 'customerId').rename(columns={'name' : 'Customers'})

    return df[df.customerId.isna()][['Customers']]

 

1. customers 데이터 프레임 기준으로 orders 데이터 프레임 left join

2. orders의 customerId가 Null인 데이터 조회