주경야매 미국주식

데이터프레임에서 인덱스값을 기준으로 최종 열을 뽑을때 본문

파이썬

데이터프레임에서 인덱스값을 기준으로 최종 열을 뽑을때

주경야매 2022. 6. 16. 22:09

주가 등 시계열데이터를 다룰 때 가끔 마주치는 일이다.

일년 전 오늘 주가는 얼마였지?

오늘이 2022년 6월13일 이라면, 일년 전은 2021년 6월13일. 그런데, 하필 그날은 일요일이다. 
일요일엔 장이 열리지 않으니 그 날짜에는 데이터가 없는게 당연하다. 그래서 늘 하듯 dataframe.loc('날짜') 로 데이터를 찾으면 값이 없다고 나온다. 뭐 이 정도에서 끝난다면 괜찮지만, 일년 전 대비 주가 변동율 같은걸 계산할 때는 일년 전 주가가 없으니 변동율을 계산할 수 없게 된다.

주가는 기본적으로 현재까지의 최종 주가를 오늘의 주가로 한다. 오늘이 일요일이라면, 오늘의 주가는 직전 금요일의 주가가 오늘 주가다. 위의 경우 사람이 수작업으로 한다면 2021년 6월11일 주가를 당겨와서 했을텐데, 컴퓨터는 이걸 일일이 지정해주지 않으면 알아서 처리해주지 않는다.

그럼 어떻게 하지? 이럴 때 필요한게 asof 다. 영어로 as of ~ 는 '~를 기준으로' 라는 표현이니 참 직관적인 함수명이다.

dataframe.asof(기준) 

데이터프레임 뒤에 asof(기준) 를 붙여주면 기준을 기준으로 최종값을 반환한다.


문법

DataFrame.asof(where, subset=None)

Input

where: 기준

Return

where를 기준으로 NaN을 제외한 최종 열의 데이터


예제

>>> s = pd.Series([1, 2, np.nan, 4], index=[10, 20, 30, 40])
>>> s
10    1.0
20    2.0
30    NaN
40    4.0
dtype: float64
>>> s.asof(20)
2.0

NaN을 제외한 최종값이 나오므로, 30으로 지정하면 20의 값이 나온다. (30이 NaN)

>>> s.asof(30)
2.0

 

Comments