2022-06-29 20:00:56

오늘은 데이터프레임의 shift 메소드라는 것에 대해 소개해드리겠습니다. pandas 공식 문서에서 shift 메소드는 다음과 같이 설명되어 있습니다.

 

Shift index by desired number of periods with an optional time freq.

 

지정된 숫자만큼 인덱스를 이동시켜준다는 의미입니다. 이것만 봐서는 이해가 잘 안 되죠. 이런 경우에는 예제를 통해 shift 메소드는 이럴 때 사용할 수 있구나를 파악하시는 것이 더 낫습니다. 

 

데이터프레임 shift 메소드

손흥민 선수가 활약하고 있는 토트넘의 2010년 이후 순위를 나타내는 데이터프레임을 하나 만들겠습니다.

 

dict_data = {'토트넘':[5, 4, 5, 6, 5, 3, 2, 3, 4, 6, 7, 4]}

df_tot = pd.DataFrame(dict_data, 
            index=['2010-11', '2011-12', '2012-13', '2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20', '2020-21', '2021-22'])
print(df_tot)

 

 

그 다음에 shift 메소드를 이용해서 행 인덱스를 하나씩 이동시킨 컬럼을 추가하겠습니다. 해당 행 기준으로는 1년 전 순위가 되기 때문에 컬럼명을 "1년전 순위"라고 명명했습니다.

 

df_tot['1년전 순위'] = df_tot.shift(1)
print(df_tot)

 

 

"1년전 순위" 컬럼에서 현재 순위 컬럼인 "토트넘"을 빼주면 토트넘의 전년 대비 순위 상승을 쉽게 구할 수 있습니다.

 

df_tot['순위 상승'] = df_tot['1년전 순위'] - df_tot['토트넘']
print(df_tot)

 

 

2014년부터 2016년까지는 계속해서 순위가 상승했음을 알 수 있고, 2017년부터 2020년까지는 순위가 하락했음을 알 수 있습니다. 

 

전체 코드 공유

import pandas as pd

dict_data = {'토트넘':[5, 4, 5, 6, 5, 3, 2, 3, 4, 6, 7, 4]}

df_tot = pd.DataFrame(dict_data, 
            index=['2010-11', '2011-12', '2012-13', '2013-14', '2014-15', '2015-16', '2016-17', '2017-18', '2018-19', '2019-20', '2020-21', '2021-22'])
print(df_tot)

df_tot['1년전 순위'] = df_tot.shift(1)
print(df_tot)

df_tot['순위 상승'] = df_tot['1년전 순위'] - df_tot['토트넘']
print(df_tot)

 

 

참고자료

[1] https://zetawiki.com/wiki/Pandas_%EC%BB%AC%EB%9F%BC_%EB%8B%A4%EC%9D%8C_%ED%96%89%EA%B3%BC%EC%9D%98_%EC%B0%A8%EC%9D%B4_%EA%B5%AC%ED%95%98%EA%B8%B0