⚙️ Tech/Pandas

[pandas] value_counts

fiftyline 2025. 2. 9. 14:55

[ value_counts ]

: 고유한 row의 수를 집계

 

 

데이터를 먼저 세팅한다.

import pandas as pd
df =  pd.DataFrame({'col1':[1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,1], 
               'col2':['A','A','A','B','B','B','B','D', 'D','C', 'C', 'A','A','A',None,None]})

 

 

- 모든 컬럼에 대해 count

df.value_counts()

# 결과
> col1  col2
1     B       4
      A       3
      D       2
2     A       2
      C       2
3     A       1

 

- 지정한 컬럼에 대해 count

df['col2'].value_counts()
df.value_counts(subset=['col1','col2'])

# 결과
> col2
A    6
B    4
D    2
C    2

> col1  col2
1     B       4
      A       3
      D       2
2     A       2
      C       2
3     A       1

 

- NA 포함 출력 (default: dropna=True)

df.value_counts(dropna=False)

# 결과
> col2
A       6
B       4
D       2
C       2
None    2

 

- 비율 출력 (default: normalize=False)

df.value_counts(normalize=True)

# 결과
> col1  col2
1     B       0.285714
      A       0.214286
      D       0.142857
2     A       0.142857
      C       0.142857
3     A       0.071429



+ 정렬하기

- 정렬하지않음 (default: sort=True)

df.value_counts(sort=False)

# 결과
> col1  col2
1     A       3
      B       4
      D       2
2     A       2
      C       2
3     A       1

 

- 오름차순 정렬

df.value_counts(sort=True, ascending=True)

# 결과
> col1  col2
3     A       1
1     D       2
2     A       2
      C       2
1     A       3
      B       4



+ 출력 방법

- 조건(n개 이상) 출력

df['col1'].value_counts().loc[lambda x:x>=3] #3개이상인 값

#결과
> col1  col2
1     B       4
      A       3

 

- 데이터프레임으로 변환

df1 = df['col1'].value_counts().reset_index()
df1.rename(columns={'col1':'컬럼별','count':'개수'})

 

index 컬럼별 개수
0 1 10
1 2 4
2 3 2