[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 175. Combine Two Tables

잰잰' 2025. 5. 9. 12:18
Table: Person

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| personId    | int     |
| lastName    | varchar |
| firstName   | varchar |
+-------------+---------+

이 테이블에서 personId는 기본 키(고유한 값이 있는 열)입니다.
이 테이블은 일부 사람들의 ID와 그들의 이름 및 성에 대한 정보를 포함하고 있습니다.

Table: Address

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| addressId   | int     |
| personId    | int     |
| city        | varchar |
| state       | varchar |
+-------------+---------+

이 테이블에서 addressId는 기본 키(고유한 값이 있는 열)입니다.
이 테이블의 각 행은 ID = PersonId인 한 사람의 도시와 주에 대한 정보를 포함하고 있습니다.

 

문제

Person 테이블에 있는 각 사람의 이름, 성, 도시, 주를 출력하는 해결책을 작성하세요.
만약 해당 personId의 주소가 Address 테이블에 없다면, 대신 null을 출력하세요.

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

결과 형식은 다음 예시를 따르세요.

Example 1:

Input: 
Person table:
+----------+----------+-----------+
| personId | lastName | firstName |
+----------+----------+-----------+
| 1        | Wang     | Allen     |
| 2        | Alice    | Bob       |
+----------+----------+-----------+
Address table:
+-----------+----------+---------------+------------+
| addressId | personId | city          | state      |
+-----------+----------+---------------+------------+
| 1         | 2        | New York City | New York   |
| 2         | 3        | Leetcode      | California |
+-----------+----------+---------------+------------+
Output: 
+-----------+----------+---------------+----------+
| firstName | lastName | city          | state    |
+-----------+----------+---------------+----------+
| Allen     | Wang     | Null          | Null     |
| Bob       | Alice    | New York City | New York |
+-----------+----------+---------------+----------+

설명 :
personId = 1에 해당하는 주소가 Address 테이블에 없기 때문에, 해당 사람의 도시와 주는 null로 반환됩니다.
addressId = 1은 personId = 2에 대한 주소 정보를 포함하고 있습니다.

 

✏️ 풀이

import pandas as pd

def combine_two_tables(person: pd.DataFrame, address: pd.DataFrame) -> pd.DataFrame:
    df = pd.merge(person, address, how='left', on='personId')

    return df[['firstName', 'lastName', 'city', 'state']]

1. person 기준으로 address 데이터 프레임 조인

2. 데이터 조회