문제 개요
판다스(Pandas) 시리즈가 주어졌을 때, 그중 가장 자주 등장하는 요소를 찾아 출력하는 프로그램을 파이썬으로 작성해 보겠습니다.
예를 들어, 다음과 같은 시리즈가 있다고 가정합니다.
0 1 1 2 2 3 3 2 4 3 5 3 6 3 7 4 8 4 9 2
위 시리즈에서 각 값의 등장 횟수를 세어 보면 1은 1번, 2는 3번, 3은 4번, 4는 2번 나타납니다. 따라서 가장 많이 반복되는 요소는 3입니다.
해결 방법
이 문제는 다음 단계를 통해 해결할 수 있습니다.
- 먼저 리스트 데이터로 시리즈를 정의합니다.
functools.reduce()메서드와 람다(lambda) 함수를 활용해 모든 요소의 빈도를 하나씩 비교합니다.- 각 요소에 대해
data[data==x]방식으로 해당 값과 일치하는 데이터의 개수(길이)를 구하고, 더 큰 쪽을 선택하도록 조건을 설정합니다.
핵심 로직은 아래 코드와 같습니다.
ft.reduce(lambda x,y: x if(len(data[data==x]) > len(data[data==y])) else y, data)
전체 예제 코드
실제 동작을 이해하기 위해 전체 구현 코드를 살펴보겠습니다.
import pandas as pd
import functools as ft
l = [1,2,3,2,3,3,3,4,4,2]
data = pd.Series(l)
print("most repeated element is:", ft.reduce(lambda x,y: x
if(len(data[data==x]) > len(data[data==y])) else y, data))실행 결과
most repeated element is: 3
추가 팁: value_counts() 활용하기
functools.reduce() 외에도 판다스에서 기본 제공하는 value_counts() 메서드를 사용하면 코드를 훨씬 간결하게 작성할 수 있습니다.
import pandas as pd
l = [1,2,3,2,3,3,3,4,4,2]
data = pd.Series(l)
print("most repeated element is:", data.value_counts().idxmax())value_counts()는 각 고유값의 빈도를 내림차순으로 정렬한 시리즈를 반환하고, idxmax()는 그중 빈도가 가장 높은 인덱스(즉, 값)를 반환합니다. 실행 결과 역시 동일하게 3이 출력됩니다.
마무리
이처럼 시리즈에서 최빈값을 구하는 방법은 여러 가지가 있습니다. functools.reduce()를 이용한 함수형 접근 방식은 로직을 직접 제어할 수 있다는 장점이 있고, value_counts().idxmax()를 사용하는 방법은 코드가 짧고 직관적이라 실무에서 널리 활용됩니다. 상황에 맞게 적절한 방법을 선택해 사용하시기 바랍니다.