반응형

02-08. 차이[백분률] (pct_change)


DataFrame.pct_change(periods=1, fill_method='pad', limit=None, freq=None, kwargs)

 

개요


pct_change는 한 객체 내에서 행과 행의 차이를 현재값과의 백분율로 출력하는 메서드 입니다.
즉, (다음행 - 현재행)÷현재행 을 의미합니다.

 

사용법


기본 사용법
※ 자세한 내용을 아래 예시를 참고 바랍니다.
df.pct_change(periods=1, fill_method='pad', limit=None, freq=None, kwargs)
periods : 비교할 간격을 지정합니다. 기본은 +1로 바로 이전 값과 비교합니다.
fill_method : {ffill : 앞의 값으로 채움 / bfill : 뒤의 값으로 채움} 결측치를 대체할 값입니다.
limit : 결측값을 몇개나 대체할지 정할 수 있습니다.
freq : 시계열 API에서 사용할 증분을 지정합니다. (예: 'M' 또는 BDay( ))

 

반응형

 

예시


먼저 기본적인 사용법 예시를 위해 6x3짜리 객체를 생성하겠습니다.

a = [1,1,4,4,1,1]
b = [1,2,4,8,16,32]
c = [1,N,N,N,16,64]
data = {"col1":a,"col2":b,"col3":c}
df = pd.DataFrame(data)
print(df)
>>
   col1  col2  col3
0     1     1   1.0
1     1     2   NaN
2     4     4   NaN
3     4     8   NaN
4     1    16  16.0
5     1    32  64.0

기본적인 사용법
기본적으로 (다음행 - 현재행)÷현재행을 의미합니다.

print(df.pct_change())
>>
   col1  col2  col3
0   NaN   NaN   NaN # 첫행은 이전행이 없으므로 NaN출력
1  0.00   1.0   0.0 # col1의 경우 이전행과 값이 같으므로 (1-1)/1 = 0 출력
2  3.00   1.0   0.0 # col2의 경우 2배씩 커지므로 차이는 자기자신 즉 결과=1
3  0.00   1.0   0.0 # col3의 경우 결측치가 위의 값 기준으로 됨. (1-1)/1=0 출력
4 -0.75   1.0  15.0
5  0.00   1.0   3.0


periods 인수 사용
periods인수는 계산할 간격을 나타냅니다. 기본은 1로 +1을 의미하며 마이너스일 경우 반대방향으로 계산합니다.
periods=2 인 경우

print(df.pct_change(periods=2))
>>
   col1  col2  col3
0   NaN   NaN   NaN 
1   NaN   NaN   NaN # 0행, 1행은 2개전값이 없으므로 NaN 출력
2  3.00   3.0   0.0 # col1의 경우 (4-1)/1 = 3 출력
3  3.00   3.0   0.0 # col2의 경우 예를들어 (8-2)/2 = 3
4 -0.75   3.0  15.0
5 -0.75   3.0  63.0

periods=-1 인 경우 (현재행 - 다음행)÷다음행 입니다.

print(df.pct_change(periods=-1))
>>
   col1  col2    col3
0  0.00  -0.5  0.0000 # col2의 경우 예를들어 (2-1)/2 = -0.5 
1 -0.75  -0.5  0.0000
2  0.00  -0.5  0.0000
3  3.00  -0.5 -0.9375
4  0.00  -0.5 -0.7500
5   NaN   NaN     NaN


fill_method / limit인수의 사용
fill_method인수는 결측치를 대체할 값을 지정할 수 있습니다.
fill_method='ffill'인 경우는 기본값으로 바로 윗값으로 결측치를 대체합니다.
fill_method='bfill'인 경우는 바로 아랫값으로 결측치를 대체합니다.

print(df.pct_change(fill_method='bfill'))
>>
   col1  col2  col3
0   NaN   NaN   NaN
1  0.00   1.0  15.0 
2  3.00   1.0   0.0
3  0.00   1.0   0.0 # col3의 경우 바로 아랫값인수로 결측치를 채우기때문에 16으로 채워집니다.
4 -0.75   1.0   0.0 # 때문에 (16-16)/16 해서 0입니다.
5  0.00   1.0   3.0

limit인수는 결측치를 몇개까지 대체할지 지정합니다.

print(df.pct_change(limit=2))
>>
   col1  col2  col3
0   NaN   NaN   NaN
1  0.00   1.0   0.0 
2  3.00   1.0   0.0 # 2번째 결측치까지는 'ffill'에따라 1로 채워집니다. 
3  0.00   1.0   NaN # 3번째 결측치는 limit=2이므로 NaN 그대로 둡니다.
4 -0.75   1.0   NaN 
5  0.00   1.0   3.0
반응형

+ 최근 글