Python/Pandas

[Pandas] 데이터프레임에서 가장 많이(또는 적게) 등장한 값, 횟수 찾기

jimmy_AI 2022. 5. 23. 00:40
반응형

파이썬 판다스 최빈값, 등장 횟수 추출 방법

판다스 모듈을 이용하여 파이썬 데이터프레임에서 가장 많이 혹은 적게 등장한 값과

해당 값의 등장 횟수를 추출하는 방법을 정리해보도록 하겠습니다.

 

이해를 돕기 위하여, 아래와 같은 간단한 데이터프레임 df를 예시로 들어 설명하겠습니다.

import pandas as pd

a = {'A' : ['가', '가', '가', '나', '나', '다'], 'B' : [10, 5, 3, 5, 5, 8]}
df = pd.DataFrame(a)
df

 

 

1. value_counts를 이용한 방법

먼저, 각 값의 등장 횟수를 세어주는 value_counts를 이용하여 최빈값을 추출할 수 있습니다.

A열을 기준으로 value_counts를 적용한 결과는 다음과 같습니다.

df.value_counts('A')

# 결과
A
가    3
나    2
다    1
dtype: int64

 

위의 결과를 바탕으로 A열에서 가장 많이 등장한 값과 그 값의 등장 횟수는 아래와 같이

추출할 수 있습니다.(적게 등장한 값은 각각 idxmin과 min 함수로 대체하면 됩니다.)

# 가장 많이 등장한 값 추출
df.value_counts('A').idxmax()[0] # '가'

# 최빈값의 등장 횟수
df.value_counts('A').max() # 3

 

만일, 두 개 이상의 열을 기준으로 가장 많이 등장한 값의 조합을 찾는 경우에는

아래 코드처럼 리스트 형태로 열 이름들을 묶어주시면 됩니다.

# 가장 많이 등장한 조합 추출
df.value_counts(['A', 'B']).idxmax() # ('나', 5)

# 최빈 조합의 등장 횟수 
df.value_counts(['A', 'B']).max() # 2
반응형

2. groupby를 이용한 방법

groupby를 count 함수를 기준으로 적용한 결과는 value_counts를 사용한 결과와

거의 비슷하다는 점(multi-index 여부만 다릅니다.)을 활용하여

마찬가지로 최빈값과 등장 횟수를 찾아낼 수 있습니다.

 

우선, count 기준 groupby를 A열에 적용한 결과는 다음과 같습니다.

df.groupby('A')['A'].count()

# 결과
A
가    3
나    2
다    1
Name: A, dtype: int64

 

이를 바탕으로 A열에서 가장 많이 등장한 값 및 횟수는 마찬가지로

아래 예시 코드처럼 찾을 수 있습니다.(여기서도 idxmin과 min 값도 찾을 수 있습니다.)

# 가장 많이 등장한 값 추출
df.groupby('A')['A'].count().idxmax() # '가'

# 최빈값의 등장 횟수
df.groupby('A')['A'].count().max() # 3

 

여기서 두 개 이상의 열을 기준으로 최빈 등장 조합 및 횟수를 찾으려면

코드를 아래처럼 변경해주시면 됩니다.(뒷 부분의 [] 내의 값은 'A', 'B' 둘 다 가능합니다.)

# 가장 많이 등장한 조합 추출
df.groupby(['A', 'B'])['A'].count().idxmax() # ('나', 5)

# 최빈 조합의 등장 횟수 
df.groupby(['A', 'B'])['A'].count().max() # 2

 

 

3. mode를 이용한 방법

데이터프레임 내에서 최빈값을 자동으로 구해주는 mode 함수를 이용하여

가장 많이 등장한 값을 찾는 것도 가능합니다.

 

다만, 이 경우에는 등장 횟수를 찾기 위해서는 value_counts 함수를 따로 적용해야 합니다.

A열에 대해서 mode를 이용하여 최빈값을 찾고, 이에 대한 등장 횟수를 탐색

예시 코드는 아래와 같습니다.

# 가장 많이 등장한 값 추출
df['A'].mode()[0] # '가'

# 최빈값의 등장 횟수
df.value_counts('A')['가'] # 3

 

다만, mode를 사용한 경우는 최소 횟수 등장 값 탐색이나

두 개 이상의 열의 값 조합에 대한 최빈값 탐색은 어렵기에

이 경우에서는 위에서 다룬 value_counts 혹은 groupby를 활용한 방법 사용을 권장드립니다.