[코딩테스트]/[Pandas]

[LeetCode - Pandas] (Easy) 586. Customer Placing the Largest Number of Orders

잰잰' 2025. 4. 30. 12:18
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라는 함수를 몰라서 조금 길게 푼 것 같다

아직 공부해야할 함수와 메서드들이 많은 것 같다...