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를 한다
'[코딩테스트] > [Pandas]' 카테고리의 다른 글
[LeetCode - Pandas] 1667. Fix Names in a Table (0) | 2025.04.11 |
---|---|
[LeetCode - Pandas] (Easy) 1683. Invalid Tweets (0) | 2025.04.10 |
[LeetCode - Pandas] (Easy) 1729. Find Followers Count (0) | 2025.04.10 |
[LeetCode - Pandas] (Easy) 1731. The Number of Employees Which Report to Each Employee (0) | 2025.04.10 |
[LeetCode - Pandas] (Easy) 1741. Find Total Time Spent by Each Employee (2) | 2025.04.09 |