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
'파이썬완전정복-Pandas DataFrame > 02. 객체내 연산' 카테고리의 다른 글
Pandas DataFrame 02-10. 기간이동 계산 (rolling) (0) | 2022.01.17 |
---|---|
Pandas DataFrame 02-09. 누적 계산 (expanding) (0) | 2022.01.11 |
Pandas DataFrame 02-07. 차이[이산] (diff) (0) | 2022.01.09 |
Pandas DataFrame 02-06. 순위 (rank) (0) | 2022.01.09 |
Pandas DataFrame 02-05. 전치 (transpose, T) (0) | 2022.01.09 |