2025.02.24 - [프로그래밍/Python 관련 정보] - [Pandas] Table of Contents
Pandas의 rank 매서드 입니다. SQL에서는 row_number()나 rank()를 쓸일이 많은데 pandas에서도 이런 기능을 탑재하고 있네요. 순위를 구하는 매서드입니다.
(1) Syntax
DataFrame.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)
(2) 입력인자
- axis=0 (Default; 열 기준)
위를 계산할 축 (0: 각 열, 1: 각 행) - method= 'average' (Default)
동점 처리 방식은 아래와 같은 옵션 중에 선택합니다.
method 동점 처리 방식 (10, 10, 20 예시) 'average' 같은 값이면 평균 rank 부여 1.5, 1.5, 3 'min' 같은 값이면 가장 작은 rank 부여 1, 1, 3 'max' 같은 값이면 가장 큰 rank 부여 2, 2, 3 'first' 데이터 순서대로 rank 부여 1, 2, 3 'dense' 같은 값은 같은 순위, 다음 순위는 1만 증가 1, 1, 2 - numeric_only = None (Default; 모든 데이터 처리)
숫자형 데이터만 처리할지 여부 - na_option= 'keep' (Default)
NaN 처리 방법 ('keep', 'top', 'bottom') - ascending=True
순위 계산 시 오름차순 여부 (True: 오름차순, False: 내림차순) - pct=False
순위를 비율로 계산할지 여부 (True: 순위를 0~1 비율로 계산)
(3) 예시
# 순위를 비율로 계산 (0~1 사이의 값으로)
rank_pct = df.rank(pct=True)
print(rank_pct)
A B
0 0.75 0.25
1 0.50 1.00
2 1.00 0.50
3 0.25 0.00
Rank함수는 groupby의 함수로도 사용할 수 있습니다.
import pandas as pd
# 예시 DataFrame
df = pd.DataFrame({
'emp_id': [1, 1, 2, 2],
'event_day': ['2024-01-01', '2024-01-02', '2024-01-01', '2024-01-01'],
'total_time': [5, 3, 7, 2]
})
# groupby + rank
df['rank'] = df.groupby('emp_id')['total_time'].rank(method='dense', ascending=False)
print(df)
Leetcode문제에서 rank를 활용하는 실전 예제를 하나 살펴봅시다.
def game_analysis(activity: pd.DataFrame) -> pd.DataFrame:
activity['login'] = activity.groupby(['player_id'], as_index=False)[['event_date']].rank()
return activity[activity.login==1][['player_id', 'event_date']].rename({'event_date':'first_login'}, axis=1)
'프로그래밍 > Python 관련 정보' 카테고리의 다른 글
[Pandas] fillna (0) | 2025.02.23 |
---|---|
[Pandas] value_counts (0) | 2025.02.23 |
[Pandas] select_dtypes() (0) | 2025.02.23 |
[Pandas] drop_duplicates (0) | 2025.02.23 |
[Pandas] update (0) | 2025.02.23 |