SW개발/python

[pandas] 그룹별 누적합 집계하는 방법

코대장 2022. 7. 31. 16:29
반응형

안녕하세요,

오늘은 pandas 그룹별 누적합을 구하는 방법에 대해서 알아 보겠습니다.

 

1. 간단한 데이터로 이해하기

아래와 같이 날짜, 과일종류, 판매량 3개 컬럼으로 이뤄진 데이터프레임이 있습니다. 만약 판매량의 누적합을 구하고 싶다면, cumsum() 을 통해서 쉽게 구할 수 있죠. 

 

하지만, 과일종류별 누적합, 일자별 누적합 등 그룹별로 누적합계를 구하려면 어떻게 해야 할까요??

아래 두 결과 코드는 groupby 내 컬럼 순서만 다르다는 차이만 있으나, 결과는 완전히 서로 다릅니다.

1. 일자별 누적합

level=[0] 에 해당하는 값이 'Date' 이기 때문에 일자별 기준으로 판매량 그룹 누적합계를 구합니다.

2. 과일별 누적합

level=[0] 에 해당하는 값이 'Fruit' 이기 때문에 과일별 기준으로 판매량 그룹 누적합계를 구합니다.

 

2. 실전 데이터로 응용해보기

일자별(index 컬럼) KOSDAQ 수급 데이터를 아래와 같이 불러 왔습니다.

 

자, 이제 위 기본 데이터로 그룹별 누적합계를 구한 방법을 응용해 봅시다.

구분이 될 컬럼 값은 종목명, invest(외국인, 개인 등), market(코스피 또는 코스닥), index(일자정보) 4가지 입니다.

 

여기서 groupby를 사용할때는 다중 index 방식을 사용합니다.

집계시 기준이 되는 컬럼이 '종목명, invest' 이렇게 두개를 보겠다는 것이지요.

위에서 그룹별 누적합계를 구했습니다. 그리고 결과값을 새로운 데이터프레임(df_cumsum)에 저장한 뒤에

다시 pandas merge 를 통해서 기존 데이터프레임(df)에 병합시켜 주었습니다.

집계값 검증을 위해서 종목 하나를 잡아 검색해 봅시다.

병합하기 전 정보

그룹별 누적합계를 구한 결과를 병합한 후 정보

 

 

참조 글

https://dsbook.tistory.com/34

https://www.delftstack.com/ko/howto/python-pandas/how-to-get-the-aggregate-of-pandas-group-by-and-sum/