프로그래밍 언어/Python

분류별 누적 지출 합계 구하기

· 코딩마이데이

이제 데이터프레임의 인덱스를 열로 전환하고, 분류별 누적 지출 금액을 확인할 수 있는 액셀 파일로 저장해 봅시다. 데이터프레임의 인덱스를 일반 열로 전환하면 특정 열을 기준으로 데이터를 정렬하거나 그룹화할 때 용이하기 때문입니다. 그 다음에는 코드를 재사용할 수 있도록 정리해 저장하겠습니다.

 

데이터프레임 인덱스 재설정

이전 단계에서 만든 데이터프레임 df_sort에서 분류 열은 데이터프레임의 인덱스로 설정되어 있습니다. 일반 열로 변경해 봅시다.

함수 reset_index()는 데이터프레임의 인덱스를 일반 열로 전환하고, 0부터 시작하는 정수를 인덱스로 재설정합니다.

소스 코드 'step_3_1.py'에 이어서 다음 코드를 추가한 뒤, 대화형 창에서 실행하세요. [실행결과]를 보면 '분류'열이 일반 열로 이동한 것을 볼 수 있습니다.

import pandas as pd

from step_2_2 import OUT_2_2  # 이전에 작성한 모듈을 불러옵니다.

df_raw = pd.read_excel(OUT_2_2)
df_pivot_1 = pd.pivot_table(df_raw, index="분류", values="사용금액", aggfunc="sum")
df_raw["거래연월"] = df_raw["거래일시"].str.slice(0, 7)
df_raw

df_pivot_2 = pd.pivot_table(df_raw, index="분류", columns="거래연월", 
                            values="사용금액", aggfunc="sum")
df_pivot_2["누적금액"] = df_pivot_2.sum(axis=1)
df_pivot_2

df_sort = df_pivot_2.sort_values("누적금액", ascending=False)
df_sort

df_reindex = df_sort.reset_index()
df_reindex

[실행결과]

 

 

액셀 파일로 저장

마지막으로 변수 df_reindex에 저장된 데이터프레임을 액셀 파일로 저장해 볼 텐데요.  pandas 패키지의 함수 to_excel()를 사용하면 간단히 해결할 수 있습니다.

이전 단계에서 작샹한 코드에 다음 코드를 추가로 입력하고, 대화형 창에서 실행하면 'output' 폴더에 'step_3_1.xlsx' 파일이 생성됩니다.

import pandas as pd

from step_2_2 import OUT_2_2  # 이전에 작성한 모듈을 불러옵니다.

df_raw = pd.read_excel(OUT_2_2)
df_pivot_1 = pd.pivot_table(df_raw, index="분류", values="사용금액", aggfunc="sum")
df_raw["거래연월"] = df_raw["거래일시"].str.slice(0, 7)
df_raw

df_pivot_2 = pd.pivot_table(df_raw, index="분류", columns="거래연월", 
                            values="사용금액", aggfunc="sum")
df_pivot_2["누적금액"] = df_pivot_2.sum(axis=1)
df_pivot_2

df_sort = df_pivot_2.sort_values("누적금액", ascending=False)
df_sort

df_reindex = df_sort.reset_index()
df_reindex

from pathlib import Path
from step_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.

df_reindex.to_excel(OUT_DIR / f"{Path(__file__).stem}.xlsx", index=False
           , sheet_name="분류별누적금액")

 

[실행결과]

 

 

소스 코드 정리

이번 절의 실행 결과 파일의 경로를 변수로 저장하여 다음 절에서 쉽게 불러올 수 있도록 코드를 정리하겠습니다. 새로운 파일을 만들어 파일명을 'step_3_2.py'로 변경합니다. 다음 코드를 입력한 뒤, 대화형 창에서 실행하면 'output' 폴더에 실행 결과 파일 'step_3_2.xlsx'이 생성됩니다. 이 액셀 파일에는 분류벼르 거래연월별로 카드 지출 누적 금액이 내림차순으로 정렬되어 있습니다.

from pathlib import Path
import pandas as pd
from step_1 import OUT_DIR # 이전에 작성한 모듈을 불러옵니다.
from step_2_2 import OUT_2_2

OUT_3_2 = OUT_DIR / f"{Path(__file__).stem}.xlsx"

if __name__ == "__main__":
    df_raw = pd.read_excel(OUT_2_2)
    df_raw["거래연월"] = df_raw["거래일시"].str.slice(0, 7)
    df_pivot = pd.pivot_table(df_raw, index="분류", columns="거래연월",
                               values="사용금액", aggfunc="sum")
    df_pivot["누적금액"] = df_pivot.sum(axis=1)
    df_sort = df_pivot.sort_values("누적금액", ascending=False)
    df_reindex = df_sort.reset_index()
    df_reindex.to_excel(OUT_3_2, index=False, sheet_name="분류별누적금액")