Pandas에서 reset_index를 사용해야 하는 이유

Pandas에서 reset_index를 사용해야 하는 이유

Pandas
Pandas에서 reset_index를 사용해야 하는 이유
Author

gabriel yang

Published

August 24, 2024

Reset_index를 사용해야 하는 이유

데이터 분석을 하다 보면, 데이터프레임의 인덱스를 초기화하거나 기존의 인덱스를 열로 변환해야 할 때가 있습니다. 이때 pandasreset_index() 함수는 매우 유용합니다.

reset_index()는 데이터프레임의 인덱스를 기본 인덱스로 초기화하면서 기존 인덱스를 데이터의 열로 변환할 수 있게 해줍니다. 이 글에서는 reset_index()를 사용해야 하는 이유와 사용 방법을 예시와 함께 설명하겠습니다.

1. reset_index를 사용해야 하는 이유

reset_index()는 다음과 같은 상황에서 유용하게 사용됩니다:

계층적 인덱스를 열로 변환하고 싶을 때

그룹화 연산 또는 pivot_table 같은 작업 후 계층적 인덱스가 생성되면, 이를 열로 변환하여 일반적인 데이터프레임 형태로 만들고 싶을 때 사용합니다.

pandas의 계층적 인덱스(Hierarchical Indexing)는 데이터를 여러 단계의 인덱스(즉, 다중 인덱스)로 구성하여, 복잡한 데이터 구조를 더욱 효율적으로 다룰 수 있게 해주는 기능입니다.

계층적 인덱스 예

import pandas as pd

# 예제 데이터프레임 생성
data = {
    'Year': [2020, 2020, 2021, 2021],
    'Product': ['Product_A', 'Product_B', 'Product_A', 'Product_B'],
    'Region': ['North', 'South', 'North', 'South'],
    'Sales': [200, 150, 220, 180]
}

df = pd.DataFrame(data)

# Year와 Product를 계층적 인덱스로 설정
df_multi_index = df.set_index(['Year', 'Product'])

df_multi_index
Region Sales
Year Product
2020 Product_A North 200
Product_B South 150
2021 Product_A North 220
Product_B South 180

위의 코드에서는 set_index함수를 사용해서 YearProduct를 갖는 계층적 인덱스를 설정했습니다.

기존 인덱스를 제거하고 기본 인덱스로 초기화하고 싶을 때

분석 중에 기존 인덱스가 더 이상 필요하지 않거나, 새로운 분석을 위해 인덱스를 초기화할 필요가 있을 때 사용합니다.

데이터프레임을 인덱스를 포함한 전체 데이터로 저장하고 싶을 때

인덱스를 데이터로 포함하여 CSV 또는 Excel 파일로 저장하고자 할 때, 인덱스를 열로 변환해야 합니다.

2. reset_index() 사용 방법

2.1 기본 사용법

기본적으로 reset_index()는 인덱스를 초기화하면서 기존 인덱스를 데이터프레임의 열로 변환합니다. 예제를 통해 이를 살펴보겠습니다.

import pandas as pd

# 예제 데이터프레임 생성
data = {
    'Year': [2020, 2020, 2021, 2021],
    'Product': ['Product_A', 'Product_B', 'Product_A', 'Product_B'],
    'Sales': [200, 150, 220, 180]
}

df = pd.DataFrame(data)
df
Year Product Sales
0 2020 Product_A 200
1 2020 Product_B 150
2 2021 Product_A 220
3 2021 Product_B 180

reset_index 예시를 위한 데이터를 생성합니다. 데이터는 YearProduct에 중복 데이터가 존재하는 long format데이터 입니다.

# Year와 Product로 그룹화한 후, Sales의 합계를 구함
grouped_df = df.groupby(['Year', 'Product']).sum()
display(grouped_df)
display(grouped_df.index)
Sales
Year Product
2020 Product_A 200
Product_B 150
2021 Product_A 220
Product_B 180
MultiIndex([(2020, 'Product_A'),
            (2020, 'Product_B'),
            (2021, 'Product_A'),
            (2021, 'Product_B')],
           names=['Year', 'Product'])

group_by명령을 이용해서 YearProduct로 데이터를 묶고 합을 구합니다. 결과의 index정보를 확인하면 위와 같이 MultiIndex를 갖는 것을 알 수 있습니다.

# 인덱스를 초기화하여 일반 데이터프레임으로 변환
reset_df = grouped_df.reset_index()

# 결과 확인
display(reset_df)
display(f"index : {reset_df.index}")
Year Product Sales
0 2020 Product_A 200
1 2020 Product_B 150
2 2021 Product_A 220
3 2021 Product_B 180
'index : RangeIndex(start=0, stop=4, step=1)'
  • 기존 데이터프레임: groupby 연산 후, YearProduct가 인덱스로 설정되어 있습니다.
  • reset_index() 사용 후: YearProduct가 다시 열로 변환되었으며, 기본 인덱스(0부터 시작하는 숫자 인덱스)가 추가되었습니다.

수행 결과인 reset_df의 형태를 살펴보면 MultiIndex의 정보가 각각 열로 나누어져 저장되고 새로운 Index가 생성되었습니다.

2.3 drop 옵션 사용

때로는 기존 인덱스를 열로 변환하지 않고 완전히 삭제하고 싶을 때가 있습니다. 이 경우 drop=True 옵션을 사용합니다.

# 인덱스를 삭제하고 기본 인덱스로 초기화
reset_df_dropped = grouped_df.reset_index(drop=True)

# 결과 확인
reset_df_dropped
Sales
0 200
1 150
2 220
3 180
  • drop=True: 기존 인덱스를 데이터프레임에서 삭제하고, 기본 인덱스를 생성합니다. 결과 데이터 프레임에는 Index 정보가 삭제되었습니다.

2.4 inplace 옵션 사용

reset_index()를 호출할 때 원본 데이터프레임을 직접 수정하고 싶다면 inplace=True 옵션을 사용할 수 있습니다.

# 원본 데이터프레임을 직접 수정하여 인덱스를 초기화
grouped_df.reset_index(inplace=True)

# 결과 확인
grouped_df
Year Product Sales
0 2020 Product_A 200
1 2020 Product_B 150
2 2021 Product_A 220
3 2021 Product_B 180

이 옵션을 사용하면 reset_index() 후에 grouped_df는 인덱스가 초기화된 상태로 변환됩니다.

3. 언제 reset_index를 사용해야 할까?

reset_index() 함수는 다음과 같은 상황에서 사용됩니다:

  • 그룹화 후 데이터프레임을 열 중심으로 다루고 싶을 때: 그룹화 후 분석을 위해 인덱스를 열로 변환해 데이터를 더 직관적으로 다룰 수 있습니다.

  • 데이터 저장 또는 시각화 전 처리: 데이터프레임을 파일로 저장하거나 시각화할 때 인덱스를 포함시키고 싶을 때 유용합니다.

  • 다양한 인덱스 변환 작업이 필요할 때: 복잡한 계층적 인덱스를 열로 변환하거나 특정 작업을 위해 인덱스를 초기화하고자 할 때 사용됩니다.

4. 결론

pandas.reset_index() 함수는 데이터프레임의 인덱스를 초기화하거나, 기존 인덱스를 열로 변환하는 데 매우 유용한 도구입니다. 데이터를 더 직관적으로 관리하거나, 저장 및 시각화를 위한 전처리 과정에서 자주 사용됩니다. 데이터 분석 과정에서 reset_index()의 활용 방법을 익혀 두면, 인덱스 조작과 관련된 다양한 상황에서 유연하게 대처할 수 있을 것입니다.