[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1484. Group Sold Products By The Date

잰잰' 2025. 4. 16. 13:34
Table Activities:

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| sell_date   | date    |
| product     | varchar |
+-------------+---------+

이 테이블에는 기본 키(고유 값이 있는 열)가 없습니다. 중복이 있을 수 있습니다.
이 테이블의 각 행은 제품 이름과 시장에서 판매된 날짜를 포함하고 있습니다.

 

문제

각 날짜에 대해 판매된 서로 다른 제품의 개수와 해당 제품들의 이름을 찾는 솔루션을 작성하세요.

각 날짜에 대해 판매된 제품 이름들은 사전순으로 정렬되어야 합니다.

결과 테이블은 sell_date를 기준으로 정렬되어 반환되어야 합니다.

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

Example 1:

Input: 
Activities table:
+------------+------------+
| sell_date  | product     |
+------------+------------+
| 2020-05-30 | Headphone  |
| 2020-06-01 | Pencil     |
| 2020-06-02 | Mask       |
| 2020-05-30 | Basketball |
| 2020-06-01 | Bible      |
| 2020-06-02 | Mask       |
| 2020-05-30 | T-Shirt    |
+------------+------------+
Output: 
+------------+----------+------------------------------+
| sell_date  | num_sold | products                     |
+------------+----------+------------------------------+
| 2020-05-30 | 3        | Basketball,Headphone,T-shirt |
| 2020-06-01 | 2        | Bible,Pencil                 |
| 2020-06-02 | 1        | Mask                         |
+------------+----------+------------------------------+

설명 :
2020-05-30에 판매된 제품은 (Headphone, Basketball, T-shirt)이며, 이를 사전순으로 정렬하고 쉼표로 구분합니다.
2020-06-01에 판매된 제품은 (Pencil, Bible)이며, 이를 사전순으로 정렬하고 쉼표로 구분합니다.
2020-06-02에 판매된 제품은 (Mask) 하나만 있으며, 그대로 반환합니다.

 

✏️ 풀이

import pandas as pd

def categorize_products(activities: pd.DataFrame) -> pd.DataFrame:
    return activities.groupby('sell_date')['product'].agg(num_sold='nunique', products=lambda x : ','.join(sorted(x.drop_duplicates()))).reset_index()

 

1. 제품 사전순으로 정렬을 위해 sorted()를 사용

2. 해당 제품에서 중복을 제거하기 위해 .drop_duplicates()를 사용

3. 동시에 여러 함수를 쓰기 때문에 agg() 사용