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에 값을 입력해 줄경우 입력된 열의 값에 대해서만 동일성 검증을 진행하게 됩니다.
col2, col3에 대해서만 실행해보겠습니다.
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
'파이썬완전정복-Pandas DataFrame > 10. 정보' 카테고리의 다른 글
Pandas DataFrame 10-12. 고유한 요소의 수 (nunique) (0) | 2022.01.24 |
---|---|
Pandas DataFrame 10-10. 비교 (compare) (0) | 2022.01.24 |
Pandas DataFrame 10-09. 키값(열의 요소) 반환 (get) (0) | 2022.01.24 |
Pandas DataFrame 10-08. 정보축 (keys) (0) | 2022.01.24 |
Pandas DataFrame 10-07. 차원의 형태 (shape) (0) | 2022.01.24 |