문제 개요
데이터프레임이 주어졌을 때, Id와 Age 열에 대해 상위 2개 값(top 2)과 하위 2개 값(bottom 2)의 백분율 변화(percentage change)를 계산하는 방법을 알아보겠습니다. 최종적으로 얻고자 하는 결과는 다음과 같습니다.
Id와 Age - 상위 2개 값
Id Age
0 NaN NaN
1 1.0 0.0
Id와 Age - 하위 2개 값
Id Age
3 0.000000 -0.071429
4 0.666667 0.000000
해결 방법
이 문제는 pandas의 pct_change() 메서드와 슬라이싱을 조합하면 간단히 해결할 수 있습니다. 순서는 다음과 같습니다.
먼저 데이터프레임을 정의합니다.
df[['Id','Age']].pct_change()에 슬라이싱[0:2]를 적용하여 상위 2개 값의 백분율 변화를 구합니다.
df[['Id','Age']].pct_change()[0:2]
같은 방식으로 슬라이싱
[-2:]를 적용하면 하위 2개 값의 백분율 변화를 구할 수 있습니다.
df[['Id','Age']].pct_change()[-2:]
예제 코드
아래 전체 코드를 실행하면 동작 과정을 쉽게 이해할 수 있습니다.
import pandas as pd
df = pd.DataFrame({"Id":[1, 2, 3, None, 5],
"Age":[12, 12, 14, 13, None],
"Mark":[80, 90, None, 95, 85],
})
print("Dataframe is:\n", df)
print("Id and Age-top 2 values")
print(df[['Id','Age']].pct_change()[0:2])
print("Id and Age-bottom 2 values")
print(df[['Id','Age']].pct_change()[-2:])
출력 결과
Dataframe is:
Id Age Mark
0 1.0 12.0 80.0
1 2.0 12.0 90.0
2 3.0 14.0 NaN
3 NaN 13.0 95.0
4 5.0 NaN 85.0
Id and Age-top 2 values
Id Age
0 NaN NaN
1 1.0 0.0
Id and Age-bottom 2 values
Id Age
3 0.000000 -0.071429
4 0.666667 0.000000
코드 설명
pandas의 pct_change() 메서드는 현재 행의 값과 바로 이전 행의 값을 비교하여 백분율 변화율을 계산합니다. 몇 가지 핵심 포인트는 다음과 같습니다.
첫 번째 행은 항상 NaN: 비교할 이전 값이 없기 때문에 인덱스 0의 결과는 NaN으로 표시됩니다.
변화가 없으면 0.0: Age 열에서 12 → 12처럼 값이 그대로면 변화율은 0.0입니다.
결측값(NaN) 처리: Id나 Age 열에 None이 포함된 경우, 해당 위치의 백분율 변화도 NaN 또는 이전 유효값 기준으로 계산됩니다. 예를 들어 하위 2개 값에서 Id 열의 0.666667은 NaN(인덱스 3) 대비 5.0(인덱스 4)의 증가율을 의미합니다.
이처럼 pct_change()는 시계열 데이터나 연속적인 수치 데이터에서 증감률을 빠르게 파악할 때 매우 유용한 함수입니다.