본문 바로가기

카테고리 없음

[파이썬 pandas] 데이터의 순위를 구하는 rank() 함수

엑셀에 Rank 함수가 있는 것처럼 판다스에도 rank 함수가 존재합니다. 이 함수를 이용하면 수 목록 내에서 개별 수의 크기 순위를 손쉽게 계산할 수 있습니다. 이번에는 rank 함수를 사용하는 방법을 알아보겠습니다.

 

코드

DataFrame.rank(self, 
		axis = 0, # 기본값 0(index)으로, index 축을 기준으로 랭크가 계산됩니다. 
    		method = 'average', # 동점을 가진 데이터들의 순위를 매기는 방법입니다.
    		numeric_only = None, # True로 설정된 경우 숫자 열만 순위를 매깁니다. 
    		na_option = 'keep', # NaN 값 순위를 매기는 방법입니다.
    		ascending = True, # 오름차순, 내림차순 정렬인지 정합니다.
    		pct = False) # 반환 된 순위를 백분위 수 형식으로 표시할지 여부입니다.

 

동점을 가진 데이터의 순위를 정하는 방법 

average(평균): 그룹의 평균 순위 부여 (예: 두 명이 공동 1등이라면 둘 다 1.5등으로 처리)
min(최솟값): 그룹에서 가장 낮은 순위 부여 (예: 두 명이 공동 1등이라면 둘 다 1등으로 처리)
max(최댓값): 그룹에서 가장 낮은 순위 부여 (예: 두 명이 공동 1등이라면 둘 다 2등으로 처리)
first(첫 번째): 그룹에서 표시되는 순서대로 순위 부여 (예: 두 명이 공동 1등이라면 순서가 빠른 사람을 1등으로 처리)
dense(밀도): min과 동일함. 다만 순위는 항상 1씩 증가

 

df = pd.DataFrame(
    {'name': ['KIM', 'LEE', 'SMITH','BROWN', 'MILLER'],
     'age': [24, 32, 43, 24, np.nan]})

df['rank_average'] = df['age'].rank(method='average')
df['rank_min'] = df['age'].rank(method='min')
df['rank_max'] = df['age'].rank(method='max')
df['rank_first'] = df['age'].rank(method='first')
df['rank_dense'] = df['age'].rank(method='dense')

min의 경우 1등 다음 3등이 나타나지만, dense의 경우 1등 다음에 2등이 나타나는 것을 볼 수 있습니다.

 

오름차순/내림차순 정렬하기

rank 함수는 기본적으로 오름차순 정렬을 합니다. ascending=False를 입력하면 내림차순 정렬을 할 수 있습니다.

df = pd.DataFrame(
    {'name': ['KIM', 'LEE', 'SMITH','BROWN', 'MILLER'],
     'age': [24, 32, 43, 24, np.nan]})

df['rank_average'] = df['age'].rank(method='min', ascending=False)
df


"""
	name	age	rank_average
0	KIM	24.0	3.0
1	LEE	32.0	2.0
2	SMITH	43.0	1.0
3	BROWN	24.0	3.0
4	MILLER	NaN	NaN
"""

 

NaN 값 순위를 매기는 방법

keep(유지): 기본 값으로 NaN의 순위에 NaN을 부여
top(가장 높은 순위): 그룹에서 가장 높은 순위 부여
bottom(가장 낮은 순위): 그룹에서 가장 높은 순위 부여

 

분석 목적에 따라서는 애초에 데이터에서 삭제하는 편이 나을 수도 있습니다.

df = pd.DataFrame(
    {'name': ['KIM', 'LEE', 'SMITH','BROWN', 'MILLER'],
     'age': [24, 32, 43, 24, np.nan]})

df['rank_average'] = df['age'].rank(method='min', ascending=False, na_option='top')
df


"""
name	age	rank_average
0	KIM	24.0	4.0
1	LEE	32.0	3.0
2	SMITH	43.0	2.0
3	BROWN	24.0	4.0
4	MILLER	NaN	1.0
"""

 

 

-이 글은 아나콘다(Anaconda3)가 설치된 환경을 기준으로 작성되었습니다.