02-06. 순위 (rank)
DataFrame.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)
개요
rank 메서드는 축에 대해서 순위를 매기는 메서드 입니다. 동일 순위일 경우 평균을 반환합니다.
사용법
기본 사용법
df.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)
axis : {0 : index / 1 : columns} 순위를 매길 레이블입니다.
method : {'average' / 'min' / 'max' / 'first' / 'dense'} 동순위 일때 처리 방법입니다.
average는 평균, min은 낮은순위, max는 높은순위, first는 나타나는순서대로
dense의 경우는 min과 같지만 그룹간 순위는 항상 1씩 증가합니다.
numeric_only : {True / False} 숫자만 순위를 매길지 여부 입니다.
na_option : {'keep' / 'top' / 'bottom'} NaN값의 처리 방법입니다.
keep의 경우 NaN순위 할당, top의 경우 낮은순위 할당, bottom의 경우 높은 순위를 할당합니다.
ascending : {True / False} 오름차순으로 할지의 여부 입니다.
pct : {True / False} 순위를 백분위수형식으로 할지 여부입니다.
예시
먼저, pd.NA가 포함된 간단한 9x1 객체를 하나 생성하겠습니다.
같은 수의 경우 보기 쉽도록 인덱스에 기호를 붙여두었습니다.(★, ☆)
data = [[5],[5],[pd.NA],[3],[-3.1],[5],[0.4],[6.7],[3]]
row = ['A★','B★','C','D☆','E','F★','G','H','I☆']
df = pd.DataFrame(data=data, index=row, columns=['Value'])
print(df)
>>
Value
A★ 5
B★ 5
C <NA>
D☆ 3
E -3.1
F★ 5
G 0.4
H 6.7
I☆ 3
method에 따른 차이
method에따라 동점의 경우 순위가 어떻게 매겨지는지 확인 할 수 있습니다.
average : D와 I의 경우 각각 3등 4등이기때문에 3.5 출력
min : A, B, F의 경우 각각 5등 6등 7등으로 가장 낮은등수인 5 출력
max : A, B, F의 경우 각각 5등 6등 7등으로 가장 높등수인 7 출력
first : 동점일경우 위에서부터 매김 D와 I 각각 3등 4등
dense : min처럼 동작하지만 등수가 순차적으로 증가
df['average']=df['Value'].rank(method='average')
df['min']=df['Value'].rank(method='min')
df['max']=df['Value'].rank(method='max')
df['first']=df['Value'].rank(method='first')
df['dense']=df['Value'].rank(method='dense')
print(df)
>>
Value average min max first dense
A★ 5 6.0 5.0 7.0 5.0 4.0
B★ 5 6.0 5.0 7.0 6.0 4.0
C <NA> NaN NaN NaN NaN NaN
D☆ 3 3.5 3.0 4.0 3.0 3.0
E -3.1 1.0 1.0 1.0 1.0 1.0
F★ 5 6.0 5.0 7.0 7.0 4.0
G 0.4 2.0 2.0 2.0 2.0 2.0
H 6.7 8.0 8.0 8.0 8.0 5.0
I☆ 3 3.5 3.0 4.0 4.0 3.0
na_option에 따른 차이
na_option에 따라 Na가 포함된경우 순위가 어떻게 매겨지는지 확인할 수 있습니다.
추가로 pct 의 경우도 추가하였습니다.
keep : Na요소에 NaN을 부여하여 그대로 둡니다.
top : Na에게 가장 높은 순위를 부여합니다. 1등이 된것을 볼 수 있습니다.
bottom : Na에게 가장 높은 순위를 부여합니다. 9등이 된것을 볼 수 있습니다.
pct : True일 경우 백분위수로 표시합니다.
df['keep']=df['Value'].rank(na_option='keep')
df['top']=df['Value'].rank(na_option='top')
df['bottom']=df['Value'].rank(na_option='bottom')
df['pct']=df['Value'].rank(pct=True)
print(df)
>>
Value keep top bottom pct
A★ 5 6.0 7.0 6.0 0.7500
B★ 5 6.0 7.0 6.0 0.7500
C <NA> NaN 1.0 9.0 NaN
D☆ 3 3.5 4.5 3.5 0.4375
E -3.1 1.0 2.0 1.0 0.1250
F★ 5 6.0 7.0 6.0 0.7500
G 0.4 2.0 3.0 2.0 0.2500
H 6.7 8.0 9.0 8.0 1.0000
I☆ 3 3.5 4.5 3.5 0.4375
'파이썬완전정복-Pandas DataFrame > 02. 객체내 연산' 카테고리의 다른 글
Pandas DataFrame 02-08. 차이[백분률] (pct_change) (0) | 2022.01.09 |
---|---|
Pandas DataFrame 02-07. 차이[이산] (diff) (0) | 2022.01.09 |
Pandas DataFrame 02-05. 전치 (transpose, T) (0) | 2022.01.09 |
Pandas DataFrame 02-04. 절대값 (abs) (0) | 2022.01.09 |
Pandas DataFrame 02-03. 곱 (prod, product) (0) | 2022.01.09 |