반응형

10-11. 고유한 행의 수 (value_counts)

DataFrame.value_counts(subset=None, normalize=False, sort=True, ascending=False, dropna=True)

 

개요


value_counts메서드는 고유한 행의 갯수를 반환합니다.
고유한 행이란 구성요소의 값이 완전히 동일한 경우를 말합니다.

 

사용법


기본 사용법
df.value_counts(subset=None, normalize=False, sort=True, ascending=False, dropna=True)
subset : 기준으로 삼을 열 입니다. list형태로도 입력이 가능합니다.
normalize : 갯수가 아니라 비율로 출력합니다.
sort : 빈도 순서로 정렬할지 여부입니다. 기본값은 True입니다.
ascending : 오름차순으로 정렬할지 여부입니다.
dropna : 결측치를 제외할지 여부입니다. 기본값은 True로 결측값은 제외됩니다.

반응형

 

예시


먼저 5x3짜리 데이터 객체를 하나 만들어보겠습니다.

n=np.NaN
idx = ['row1','row2','row3','row4','row5']
col = ['col1','col2','col3']
data = [['A','Z',3,],['D','Y',n],['B','Z',3],['C','Y',8],['A','Z',3]]
df = pd.DataFrame(data, idx, col)
print(df)
>>
     col1 col2  col3
row1    A    Z   3.0
row2    D    Y   NaN
row3    B    Z   3.0
row4    C    Y   8.0
row5    A    Z   3.0

기본적인 사용법(+subset)
요소로 아무값도 입력하지 않는 경우 행의 모든 값을 대상으로 완전히 같은 행의 갯수를 우측에 출력하게됩니다.

print(df.value_counts())
>>
col1  col2  col3  # row1과 row5는 완벽히 동일한 값을 가지므로 2로 출력되고, row2의 경우 결측치가 있어 제외됨.
A     Z     3.0     2
B     Z     3.0     1
C     Y     8.0     1
dtype: int64

subset에 값을 입력해 줄경우 입력된 열의 값에 대해서만 동일성 검증을 진행하게 됩니다.
col2col3에 대해서만 실행해보겠습니다.

print(df.value_counts(subset=['col2','col3']))
>>
col2  col3  # row1, row3, row5는 col2, col3의 값이 같으므로 3으로 출력됩니다.
Z     3.0     3
Y     8.0     1
dtype: int64


normalize인수의 사용
normalize인수를 사용할 경우 동일한 행의 갯수가 아닌 전체에서 차지하는 비율로 출력됩니다.
normalize=False인 경우(기본값)

print(df.value_counts(subset='col2',normalize=False))
>>
col2
Z    3
Y    2
dtype: int64

normalize=True인 경우

print(df.value_counts(subset='col2',normalize=True))
>>
col2
Z    0.6    #전체 5개중 3개로 60% 인 0.6 출력
Y    0.4    #전체 5개중 2개로 40% 인 0.4 출력
dtype: float64


sort와 ascending인수의 사용
sort인수를 사용할 경우 최빈값부터 정렬하게되고, ascending을 사용할 경우 오름차순으로 정렬하게 됩니다.
먼저 비교를 위해 sort=False이고 ascending=False으로 출력해보겠습니다.

print(df.value_counts(subset=['col2','col3'],sort=False,ascending=False))
>>
col2  col3
Y     8.0     1
Z     3.0     3
dtype: int64

sort=True인 경우(기본값) 제일 고유값의 갯수가 많은 행부터 정렬됩니다.

print(df.value_counts(subset=['col2','col3'],sort=True,ascending=False))
>>
col2  col3
Z     3.0     3
Y     8.0     1
dtype: int64

ascending=True인 경우 오름차순으로 정렬됩니다.

print(df.value_counts(subset=['col2','col3'],sort=True,ascending=True))
>>
col2  col3
Y     8.0     1
Z     3.0     3
dtype: int64


dropna의 사용(결측치 포함 여부)
dropna=True인 경우(기본값) 결측치가 포함된 행은 계산하지 않습니다. False인 경우 포함하게됩니다.

print(df.value_counts(subset=['col2','col3'],dropna=False))
>>
col2  col3
Z     3.0     3
Y     8.0     1
      NaN     1
dtype: int64
반응형

+ 최근 글