판다스에서 그룹별로 오름차순과 내림차순을 다르게 설정해 순위를 매기는 방법
데이터 분석 과정에서 그룹별로 상이한 순위 적용 방식을 요구하는 경우가 자주 발생합니다. 특히 주식이나 선물과 같은 금융 포지션을 분석할 때, 포지션에 따라 오름차순과 내림차순을 다르게 설정하여 그룹내 순위를 매기는 것이 필요합니다.
목표
이해를 돕기 위해 예시 데이터 프레임으로 설명하겠습니다.
import pandas as pd
# 예시 데이터 프레임 생성
data = {'position': [1, 1, 1, 0, 0, 0],
'value': [10, 20, 30, 40, 50, 60]}
df = pd.DataFrame(data)
df에서 우리는 position 열을 기준으로 각 그룹의 순위를 서로 다른 방향으로 적용하고자 합니다. 구체적으로 position이 1인 경우에는 오름차순으로, position이 0인 경우에는 내림차순으로 value 열의 순위를 매기고자 합니다.
구현 방법
이를 위한 간단한 방법은 position이 1일 때 value 값에 -1을 곱하여 순위를 매기는 것입니다.
# 'position'이 1인 경우에 해당하는 조건문 생성
cond = df['position'].eq(1)
# 'position' 값에 따라 오름차순과 내림차순으로 순위 매기기
df['rank'] = (
df['value']
.mask(cond, df['value'].mul(-1)) # 'position'이 1일 때는 value 열을 음수로 변환
.groupby(df['position']).rank() # 그룹화해서 순위 매기기
)
추가 설명
mask 함수는 특정 조건이 True일 때 값을 변경하는 데 사용됩니다. 위 코드에서는 position이 1인 경우에만 value 값에 -1을 곱하여 음수로 변환했고, 이를 통해 해당 그룹은 내림차순으로 순위가 매겨지게 됩니다. 이 방법은 데이터프레임의 각 그룹에 대해 서로 다른 순위 매기기 방향을 적용할 수 있습니다.
추가로 다중 그룹이 포함된 경우에는(예시 0, 1, 2 그룹은 내림 차순 / 3, 4 그룹은 오름차순) isin 함수를 사용하여 조건문을 생성하면 간결하게 처리할 수 있습니다.
교보문고 구매 페이지, 알라딘 구매 페이지, yes24 구매 페이지
유튜브에서 판다스 강의 중입니다.
https://www.youtube.com/@KimPandas
'판다스 > 판다스 팁' 카테고리의 다른 글
[pandas] 집계 함수 (0) | 2024.10.21 |
---|---|
[pandas] 수학적 연산 (2) | 2024.10.20 |
[pandas] 기존 열을 수정하면서 새로운 열도 추가하는 방법 (0) | 2024.05.22 |
[pandas] 기존 데이터 프레임의 상위 2행을 멀티 인덱스로 설정하기 (0) | 2024.05.22 |
[pandas] 그룹의 순서를 유지하고 그룹 내에서 정렬하기 (0) | 2024.05.13 |