Table: Orders
+-----------------+----------+
| Column Name | Type |
+-----------------+----------+
| order_number | int |
| customer_number | int |
+-----------------+----------+
order_number는 이 테이블의 기본 키(고유 값이 있는 열)입니다.
이 테이블은 주문 ID와 고객 ID에 대한 정보를 포함하고 있습니다.
문제
가장 많은 주문을 한 고객의 customer_number를 찾는 솔루션을 작성해주세요.
테스트 케이스는 정확히 한 명의 고객이 다른 고객들보다 더 많은 주문을 했다는 조건으로 생성됩니다.
결과 형식은 아래 예시와 같습니다.
Example 1:
Input:
Orders table:
+--------------+-----------------+
| order_number | customer_number |
+--------------+-----------------+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 3 |
+--------------+-----------------+
Output:
+-----------------+
| customer_number |
+-----------------+
| 3 |
+-----------------+
설명 :
번호 3번 고객은 두 개의 주문을 했으며, 이는 1번 고객이나 2번 고객이 각각 한 개의 주문을 한 것보다 많습니다.
따라서 결과는 customer_number 3입니다.
✏️ 풀이
# 내 풀이 #
import pandas as pd
def largest_orders(orders: pd.DataFrame) -> pd.DataFrame:
df = orders.groupby('customer_number')['order_number'].count().reset_index(name='cnt').sort_values(by='cnt', ascending=False)
return df.head(1)[['customer_number']]
# 다른 풀이 #
def largest_orders(orders: pd.DataFrame) -> pd.DataFrame:
return orders['customer_number'].mode().to_frame()
📚 개념정리
1. mode() : 최빈값을 구하는 함수
2. to_frame() : Series를 DataFrame으로 변환하는 메서드
mode()가 반환하는 것은 Series 객체 이므로 DataFrame으로 바꾸기 위해 to_frame() 사용
한줄 코딩이 가능한데 mode라는 함수를 몰라서 조금 길게 푼 것 같다
아직 공부해야할 함수와 메서드들이 많은 것 같다...
'[코딩테스트] > [Pandas]' 카테고리의 다른 글
[LeetCode - Pandas] (Easy) 584. Find Customer Referee (0) | 2025.04.30 |
---|---|
[LeetCode - Pandas] (Easy) 595. Big Countries (0) | 2025.04.29 |
[LeetCode - Pandas] (Easy) 596. Classes More Than 5 Students (0) | 2025.04.29 |
[LeetCode - Pandas] (Easy) 607. Sales Person (0) | 2025.04.28 |
[LeetCode - Pandas] (Easy) 610. Triangle Judgement (0) | 2025.04.28 |