02-09. 누적 계산 (expanding)
DataFrame.expanding(min_periods=1, center=None, axis=0, method='single')
개요
expanding 메서드는 행이나 열의 값에 대해 누적으로 연산을 수행하는 메서드입니다.
df.expanding( ).sum( ) 처럼 추가 메서드를 이용하여 연산을 수행합니다.
사용법
기본 사용법
※ 자세한 내용은 아래 예시를 참고 바랍니다.
df.expanding(min_periods=1, center=None, axis=0, method='single').추가메서드()
min_periods : 연산을 수행할 요소의 최소 갯수입니다. 이보다 작으면 NaN을 출력합니다.
center : 미사용
axis : 누적 연산을 수행할 축을 지정합니다.
method : {single / table} 연산을 한 줄씩 수행할지 아니면 전체 테이블에 대해서 롤링을 수행할지 여부입니다.
기본값은 'single'로 한 줄씩 연산을 수행합니다. 'table'을 사용하기 위해서는 numba 라이브러리가 설치되어있어야 하며,
추가 연산 메서드에서 engine=numba로 설정해주어야 합니다.
예시
먼저 기본적인 사용법 예시를위하여 4x2 짜리 데이터를 만들어 보겠습니다.
method='table'의 사용을 위해 numba 라이브러리를 추가로 import하였습니다.
import numba
...
data = {'col1':[1,2,3,4],'col2':[3,7,5,6]}
idx = ['row1','row2','row3','row4']
df = pd.DataFrame(data = data, index = idx)
print(df)
>>
col1 col2
row1 1 3
row2 2 7
row3 3 5
row4 4 6
기본적인 사용법
기본적으로 df.expanding( ).추가연산메서드 형태로 지정하면, 해당 연산을 누적으로 진행하게 됩니다.
print(df.expanding().sum())
>>
col1 col2
row1 1.0 3.0
row2 3.0 10.0
row3 6.0 15.0
row4 10.0 21.0 #열마다 누적으로 sum을 진행
min_period를 지정하게되면, 입력값 만큼의 갯수가 충족되지 않으면 연산을 하지 않고 NaN을 반환합니다.
print(df.expanding(min_periods=4).sum())
>>
col1 col2
row1 NaN NaN
row2 NaN NaN
row3 NaN NaN
row4 10.0 21.0
axis=1로 지정하면 열 기준으로 누적값의 계산이 수행됩니다.
print(df.expanding(axis=1).sum())
>>
col1 col2
row1 1.0 4.0
row2 2.0 9.0
row3 3.0 8.0
row4 4.0 10.0
method='table'로 입력할 경우 numba 라이브러리를 이용해 연산을 테이블단위로 롤링할 수 있습니다.
추가 연산 메서드에 인수로 engine='numba'를 지정해주어야 합니다.
파이썬은 인터프리티 언어라서 C/C++등과 같은 언어에 비해 느립니다.
Numba는 파이썬 코드를 LLVM컴파일러를 이용해 머신코드로 바꾸어 수치연산을 가속해주는 라이브러리입니다.
print(df.expanding(method='table').sum(engine='numba'))
>>
col1 col2
row1 1.0 3.0 # 연산의 결과는 singe때와 동일하지만 대량의 데이터 연산에는 빠른 속도를 지원함.
row2 3.0 10.0
row3 6.0 15.0
row4 10.0 21.0
'파이썬완전정복-Pandas DataFrame > 02. 객체내 연산' 카테고리의 다른 글
Pandas DataFrame 02-11. 그룹화 계산 (groupby) (0) | 2022.01.28 |
---|---|
Pandas DataFrame 02-10. 기간이동 계산 (rolling) (0) | 2022.01.17 |
Pandas DataFrame 02-08. 차이[백분률] (pct_change) (0) | 2022.01.09 |
Pandas DataFrame 02-07. 차이[이산] (diff) (0) | 2022.01.09 |
Pandas DataFrame 02-06. 순위 (rank) (0) | 2022.01.09 |