Contents

Pandas - value_counts(), 고유값의 빈도와 비율을 같이 표시하기

value_counts() 두 개를 엮어서 빈도와 비율을 같이 표시해보자.

/images/logo/pandas.svg
pandas 로고
  • 아래와 같이 value_counts() 결과 두 개를 join()해서 예쁘게 표현할 수 있음
# 개수랑 비율 같이. column명도 바꿔서 표시
df['embark_town'].value_counts(dropna=False).to_frame('count').join(
    df['embark_town'].value_counts(dropna=False, normalize=True).to_frame('normalize')
).round(4)

countnormalize
Southampton6440.7228
Cherbourg1680.1886
Queenstown770.0864
NaN20.0022


먼저 titanic 데이터셋을 불러오자. (seaborn 패키지 이용)

import pandas as pd
import seaborn as sns

# seaborn 패키지에서 titanic 데이터셋 불러와 사용
df = sns.load_dataset('titanic')
print(df.shape)
df.head()
(891, 15)

survivedpclasssexagesibspparchfareembarkedclasswhoadult_maledeckembark_townalivealone
003male22.0107.2500SThirdmanTrueNaNSouthamptonnoFalse
111female38.01071.2833CFirstwomanFalseCCherbourgyesFalse
213female26.0007.9250SThirdwomanFalseNaNSouthamptonyesTrue
311female35.01053.1000SFirstwomanFalseCSouthamptonyesFalse
403male35.0008.0500SThirdmanTrueNaNSouthamptonnoTrue


🔷 고유값들의 빈수 확인

Series(여기서는 df['embark_town'])의 value_count()를 호출하면 고유값들의 빈도수를 표시해준다.
단, 여기서 NaN은 따로 세지 않는다.

# 고유값들의 개수 확인 (NaN은 세지 않음)
df['embark_town'].value_counts()
Southampton    644
Cherbourg      168
Queenstown      77
Name: embark_town, dtype: int64


🔷 NaN의 개수도 같이 확인

NaN의 개수도 같이 확인하려면 dropna=False 를 명시적으로 적어주어야 한다.

# NaN의 개수도 같이 확인
df['embark_town'].value_counts(dropna=False)
Southampton    644
Cherbourg      168
Queenstown      77
NaN              2
Name: embark_town, dtype: int64


🔷 비율로 확인

비율도 같이 보면 더 와 닿을 것 같다.
normalize=True 를 주자.

# 비율로 확인
df['embark_town'].value_counts(dropna=False, normalize=True)
Southampton    0.722783
Cherbourg      0.188552
Queenstown     0.086420
NaN            0.002245
Name: embark_town, dtype: float64


🔷 빈도와 비율 같이 표시

빈도랑 비율 둘 다 한꺼번에 표시하고 싶다.
아래와 같이 agg() 를 활용할 수 있다.

# 개수랑 비율 같이 표시
df['embark_town'].agg([pd.Series.value_counts, lambda x: x.value_counts(normalize=True)])

value_counts<lambda>
Southampton6440.724409
Cherbourg1680.188976
Queenstown770.086614


🔷 빈도와 비율 같이 표시. column명도 변경

그런데 NaN이 빠져있고, column명도 마음에 안든다.
아래처럼 하면, column 이름까지 바꿔서 예쁘게 표시할 수 있다.

# 개수랑 비율 같이 예쁘게 표시
df['embark_town'].value_counts(dropna=False).to_frame('count').join(
    df['embark_town'].value_counts(dropna=False, normalize=True).to_frame('normalize')
).round(4)

countnormalize
Southampton6440.7228
Cherbourg1680.1886
Queenstown770.0864
NaN20.0022




Related Content