Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 데이터프레임에서 특정 열의 최소 순위 구하기

데이터 분석을 하다 보면 데이터프레임의 특정 열 값들을 기준으로 순위(rank)를 매겨야 하는 경우가 자주 있습니다. 이때 판다스(Pandas)의 rank() 함수를 사용하면 간단하게 해결할 수 있습니다. 특히 동일한 값을 가진 항목이 여러 개일 때 method='min' 옵션을 사용하면 해당 그룹 전체에 최소 순위가 부여됩니다.

문제 상황

다음과 같은 데이터프레임이 있다고 가정해 보겠습니다. 여기서 'Age' 열을 기준으로 최소 순위(minimum rank)를 계산하는 것이 목표입니다.

 Id    Name  Age  Rank
0  1     Adam    12    1.0
1  2     David    13    3.0
2  3   Michael    14    5.0
3  4     Peter    12    1.0
4  5   William    13    3.0

해결 방법

이 문제는 다음 두 단계로 해결할 수 있습니다.

  • 먼저 데이터프레임을 정의합니다.
  • 'Age' 열을 rank() 함수에 적용하여 axis=0(열 방향), method='min', ascending=True 조건으로 최소 순위를 계산합니다.
df["Age"].rank(axis=0, method='min', ascending=True)

rank() 함수의 주요 매개변수

  • axis=0: 열 방향으로 순위를 계산합니다.
  • method='min': 동일한 값이 있을 경우 해당 그룹에 가장 낮은(최소) 순위를 부여합니다. 예를 들어 1등이 두 명이면 둘 다 1순위가 되고, 다음 값은 3순위가 됩니다.
  • ascending=True: 값이 작을수록 높은 순위를 받습니다.

전체 예제 코드

아래 코드를 통해 실제 동작을 확인해 보겠습니다.

import pandas as pd

data = {'Id': [1, 2, 3, 4, 5],
       'Name': ["Adam", "David", "Michael", "Peter", "William"],
       'Age': [12, 13, 14, 12, 13]}

df = pd.DataFrame(data)
df["Rank"] = df["Age"].rank(axis=0, method='min', ascending=True)
print(df)

실행 결과

 Id    Name  Age  Rank
0  1     Adam    12    1.0
1  2     David    13    3.0
2  3   Michael    14    5.0
3  4     Peter    12    1.0
4  5   William    13    3.0

결과 해석

실행 결과를 살펴보면 다음과 같은 규칙으로 순위가 매겨진 것을 확인할 수 있습니다.

  • Adam과 Peter는 나이가 12로 같으므로 둘 다 최소 순위인 1.0을 받습니다.
  • David와 William은 나이가 13으로 같으므로 3.0순위를 받습니다. 앞의 1순위가 두 개 있기 때문에 다음 순위는 3이 됩니다.
  • Michael은 나이가 14로 가장 많아 5.0순위를 받습니다.

이처럼 rank() 함수의 method='min' 옵션을 활용하면 동점자 처리 규칙을 명확하게 지정하면서 손쉽게 순위를 계산할 수 있습니다.