[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1795. Rearrange Products Table

잰잰' 2025. 4. 7. 15:23
Table: Products

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| product_id  | int     |
| store1      | int     |
| store2      | int     |
| store3      | int     |
+-------------+---------+

product_id는 이 테이블의 기본 키(고유 값이 있는 열)입니다.
이 테이블의 각 행은 3개의 다른 상점(store1, store2, store3)에서 제품의 가격을 나타냅니다.
만약 제품이 특정 상점에서 판매되지 않는다면, 그 상점의 가격 열에는 null 값이 표시됩니다.

 

문제

제품 테이블을 재구성하여 각 행이 (product_id, store, price) 형식이 되도록 하세요. 만약 제품이 특정 상점에서 판매되지 않는다면, 해당 제품_id와 상점 조합을 결과 테이블에 포함하지 마세요.

결과 테이블은 예시와 같은 형식으로 반환됩니다.

Example 1:

Input: 
Products table:
+------------+--------+--------+--------+
| product_id | store1 | store2 | store3 |
+------------+--------+--------+--------+
| 0          | 95     | 100    | 105    |
| 1          | 70     | null   | 80     |
+------------+--------+--------+--------+
Output: 
+------------+--------+-------+
| product_id | store  | price |
+------------+--------+-------+
| 0          | store1 | 95    |
| 0          | store2 | 100   |
| 0          | store3 | 105   |
| 1          | store1 | 70    |
| 1          | store3 | 80    |
+------------+--------+-------+

설명 : 제품 0은 모든 세 상점에서 각각 95, 100, 105의 가격으로 판매됩니다. 제품 1은 store1에서 가격 70으로, store3에서 가격 80으로 판매됩니다. 이 제품은 store2에서는 판매되지 않습니다.

 

✏️ 풀이

import pandas as pd

def rearrange_products_table(products: pd.DataFrame) -> pd.DataFrame:
    df_melt = pd.melt(products, id_vars='product_id', var_name='store', value_name='price').dropna()

    return df_melt

 

dropna()를 이용해서 판매하지 않는 null 값인 데이터는 삭제한다