[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 1693. Daily Leads and Partners

잰잰' 2025. 4. 10. 15:47
Table: DailySales

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| date_id     | date    |
| make_name   | varchar |
| lead_id     | int     |
| partner_id  | int     |
+-------------+---------+

이 테이블에는 기본 키(고유한 값을 가진 열)가 없습니다. 중복된 데이터가 포함될 수 있습니다.
이 테이블은 판매된 날짜, 제품 이름, 그리고 해당 제품이 판매된 리드(lead)와 파트너(partner)의 ID를 포함하고 있습니다.
제품 이름은 소문자 영어 알파벳으로만 구성되어 있습니다.

 

문제

각 date_id와 make_name에 대해, 서로 다른 lead_id의 수와 서로 다른 partner_id의 수를 구하세요.

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

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

Example 1:

Input: 
DailySales table:
+-----------+-----------+---------+------------+
| date_id   | make_name | lead_id | partner_id |
+-----------+-----------+---------+------------+
| 2020-12-8 | toyota    | 0       | 1          |
| 2020-12-8 | toyota    | 1       | 0          |
| 2020-12-8 | toyota    | 1       | 2          |
| 2020-12-7 | toyota    | 0       | 2          |
| 2020-12-7 | toyota    | 0       | 1          |
| 2020-12-8 | honda     | 1       | 2          |
| 2020-12-8 | honda     | 2       | 1          |
| 2020-12-7 | honda     | 0       | 1          |
| 2020-12-7 | honda     | 1       | 2          |
| 2020-12-7 | honda     | 2       | 1          |
+-----------+-----------+---------+------------+
Output: 
+-----------+-----------+--------------+-----------------+
| date_id   | make_name | unique_leads | unique_partners |
+-----------+-----------+--------------+-----------------+
| 2020-12-8 | toyota    | 2            | 3               |
| 2020-12-7 | toyota    | 1            | 2               |
| 2020-12-8 | honda     | 2            | 2               |
| 2020-12-7 | honda     | 3            | 2               |
+-----------+-----------+--------------+-----------------+

설명 :
2020-12-08의 경우, toyota는 lead ID가 [0, 1], partner ID가 [0, 1, 2]이고,
honda는 lead ID가 [1, 2], partner ID가 [1, 2]입니다.

2020-12-07의 경우, toyota는 lead ID가 [0], partner ID가 [1, 2]이고,
honda는 lead ID가 [0, 1, 2], partner ID가 [1, 2]입니다.

 

✏️ 풀이

# 풀이1 #
import pandas as pd

def daily_leads_and_partners(daily_sales: pd.DataFrame) -> pd.DataFrame:
    result = daily_sales.groupby(['date_id', 'make_name'], as_index=False).agg(unique_leads=('lead_id', lambda x:x.nunique()), unique_partners=('partner_id', lambda x:x.nunique()))

    return result
    
# 풀이2 #
import pandas as pd

def daily_leads_and_partners(daily_sales: pd.DataFrame) -> pd.DataFrame:
    result = daily_sales.groupby(['date_id', 'make_name'], as_index=False).agg(unique_leads=('lead_id', 'nunique'), unique_partners=('partner_id', 'nunique'))

    return result

lead_id, partner_id 각각 unique한 count를 구해야 하기 때문에

agg() 를 사용해서 여러 함수를 적용시키고 nunique()를 써서 중복 값을 제외한 count를 한다