인덱스 설정과 재설정
set_index()로 열을 행 인덱스로 올리고 reset_index()로 되돌리며 MultiIndex의 개요를 살펴봅니다.
인덱스 설정과 재설정은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 4번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
DataFrame 인덱스란 무엇인가요?
모든 Pandas DataFrame에는 각 행에 연결된 레이블 집합인 행 인덱스가 있습니다. 기본 인덱스는 RangeIndex(0, 1, 2, …)이지만, 날짜, 제품 ID, 사용자 ID 또는 고유 키처럼 자연스러운 식별자 역할을 하는 어떤 열로든 바꿀 수 있습니다. 의미 있는 인덱스를 사용하면 가독성이 향상되고, 레이블 기반 슬라이싱이 가능해지며, 시계열 리샘플링에 필요합니다.
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
print('Default index:', df.index.tolist()) # [0, 1, 2]
print(df)set_index() — 열 승격하기
DataFrame.set_index('col')은 지정한 열을 행 인덱스로 승격하고 일반 열에서는 제거합니다. 해당 열의 값이 행 레이블이 됩니다. 한 열이 자연스러운 키 역할을 할 때 DataFrame을 더 의미 있게 만드는 표준적인 방법입니다. 새 DataFrame이 반환되며, inplace=True를 사용하지 않는 한 원본은 변경되지 않습니다.
import pandas as pd
df = pd.DataFrame({
'date': ['2024-01-01', '2024-01-02', '2024-01-03'],
'sales': [100, 200, 150]
})
df = df.set_index('date')
print(df)
# sales
# date
# 2024-01-01 100
# 2024-01-02 200
# 2024-01-03 150
print(df.index) # Index(['2024-01-01', ...], dtype='object', name='date')사용자 지정 인덱스로 행 선택하기
의미 있는 열을 인덱스로 설정하면 .loc[label]을 사용하여 불리언 마스크 없이도 깔끔하고 읽기 쉬운 문법으로 레이블에 해당하는 행을 가져올 수 있습니다. DatetimeIndex에서는 df.loc['2024-01']과 같은 일부 날짜 문자열도 사용하여 2024년 1월의 모든 행을 선택할 수 있습니다.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C'],
'price': [10, 20, 30],
'stock': [100, 50, 75]
})
df = df.set_index('product')
# Access row by label
print(df.loc['B'])
# price 20
# stock 50
# Name: B, dtype: int64여러 열을 사용하는 set_index() — MultiIndex
열 이름의 목록을 set_index()에 전달하면 MultiIndex(계층형 인덱스)가 생성됩니다. 결과 DataFrame은 .loc[]에서 튜플을 사용하여 조회할 수 있습니다. MultiIndex는 그룹화된 시계열(지역 + 날짜), 패널 데이터(대상 + 시간), 두 수준의 행 그룹화가 필요한 모든 분석에 필수적입니다.
import pandas as pd
df = pd.DataFrame({
'region': ['East', 'East', 'West', 'West'],
'year': [2023, 2024, 2023, 2024],
'revenue': [100, 150, 200, 220]
})
df = df.set_index(['region', 'year'])
print(df)
# revenue
# region year
# East 2023 100
# 2024 150
# West 2023 200
# 2024 220
print(df.loc[('East', 2024)]) # revenue = 150set_index()의 drop= 매개변수
기본적으로 set_index('col')은 해당 열을 인덱스로 설정한 뒤 DataFrame의 일반 열에서 제거합니다. drop=False를 전달하면 해당 열을 인덱스로 사용하면서도 열을 그대로 유지할 수 있습니다. 레이블 기반 접근도 필요하고 일반 열 영역에서 계산하기 위해 해당 열도 사용해야 할 때 유용합니다.
import pandas as pd
df = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})
# Keep 'id' as both index and column
df_with_both = df.set_index('id', drop=False)
print(df_with_both)
# id value
# id
# 1 1 10
# 2 2 20
# 3 3 30reset_index() — 인덱스를 열로 되돌리기
reset_index()는 set_index()의 반대 작업입니다. 현재 행 인덱스를 일반 열로 옮기고 인덱스를 기본 RangeIndex로 바꿉니다. 이는 groupby().agg() 후 또는 이후 처리에서 열로 사용해야 하는 의미 있는 인덱스가 남는 작업 후에 흔히 필요합니다.
import pandas as pd
df = pd.DataFrame({'sales': [100, 200]}, index=['East', 'West'])
df.index.name = 'region'
reset = df.reset_index()
print(reset)
# region sales
# 0 East 100
# 1 West 200
print(reset.index.tolist()) # [0, 1] — default RangeIndex restoredreset_index(drop=True)
reset_index()에 drop=True를 전달하면 현재 인덱스를 열로 옮기지 않고 완전히 삭제합니다. 현재 인덱스에 의미 있는 정보가 없을 때(예: 행을 필터링한 후 인덱스에 0, 3, 7처럼 빈칸이 있을 때) 사용하면 0부터 시작하는 깔끔한 순차 인덱스를 만들 수 있습니다.
import pandas as pd
df = pd.DataFrame({'x': [10, 20, 30, 40, 50]})
filtered = df[df['x'] > 15]
print('Filtered index:', filtered.index.tolist()) # [1, 2, 3, 4]
# Drop the old index — don't move it to a column
clean = filtered.reset_index(drop=True)
print('Clean index:', clean.index.tolist()) # [0, 1, 2, 3]groupby 후 reset_index()
groupby().agg()를 호출하면 그룹화 키가 인덱스가 됩니다. reset_index()를 호출하면 이를 일반 열로 되돌려 작업, 병합 또는 내보내기가 더 쉬운 평면 표 형식의 결과를 얻을 수 있습니다. 이는 실제로 reset_index()를 사용하는 가장 일반적인 방법 중 하나입니다.
import pandas as pd
df = pd.DataFrame({
'dept': ['Eng', 'HR', 'Eng', 'Sales', 'HR'],
'salary': [90000, 50000, 80000, 70000, 55000]
})
# After groupby, dept becomes the index
agg = df.groupby('dept')['salary'].mean()
print(type(agg), agg.index.tolist())
# dept is the index
# Reset makes dept a regular column again
result = agg.reset_index()
result.columns = ['dept', 'avg_salary']
print(result)인덱스 이름을 위한 rename_axis()
행 인덱스에 이름이 없거나 명확하게 표시하기 위해 이름을 바꾸려면 df.rename_axis('new_name')(행 인덱스) 또는 df.rename_axis('col_name', axis=1)(열 축)를 사용하세요. 인덱스에 의미 있는 이름을 지정하면 특히 인덱스 이름이 열 머리글이 되는 CSV로 내보낼 때 결과를 별도의 설명 없이도 이해하기 쉬워집니다.
import pandas as pd
df = pd.DataFrame({'sales': [100, 200, 300]}, index=['A', 'B', 'C'])
print(df.index.name) # None
# Name the index
df = df.rename_axis('region')
print(df)
# sales
# region
# A 100
# B 200
# C 300빈칸을 채우기 위한 재인덱싱
DataFrame.reindex(new_index)는 DataFrame을 새 인덱스에 맞게 재구성하고, 새 인덱스에는 있지만 원래 데이터에는 없는 위치를 NaN으로 채웁니다. 이는 DataFrame을 공통의 완전한 인덱스에 맞추는 데 사용됩니다. 예를 들어 일부 달에 데이터가 없어도 한 해의 모든 달이 표시되도록 할 수 있습니다.
import pandas as pd
df = pd.DataFrame({
'month': ['Jan', 'Mar', 'Jun'],
'revenue': [100, 200, 300]
}).set_index('month')
all_months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun']
complete = df.reindex(all_months)
print(complete)
# revenue
# Jan 100.0
# Feb NaN <- filled with NaN
# Mar 200.0
# Apr NaN
# May NaN
# Jun 300.0MultiIndex reset_index 및 수준 선택
MultiIndex DataFrame에서 reset_index()는 기본적으로 모든 수준을 열로 옮깁니다. 특정 수준만 재설정하려면 level=을 전달하세요. 이렇게 하면 한 수준은 인덱스로 유지하면서(예: 날짜를 인덱스로 유지) 다른 수준만 열로 옮길 수 있습니다.
import pandas as pd
df = pd.DataFrame(
{'revenue': [100, 150, 200, 220]},
index=pd.MultiIndex.from_tuples(
[('East', 2023), ('East', 2024), ('West', 2023), ('West', 2024)],
names=['region', 'year']
)
)
# Reset only the 'year' level, keep 'region' as index
df2 = df.reset_index(level='year')
print(df2)
# year revenue
# region
# East 2023 100
# East 2024 150
# West 2023 200
# West 2024 220빠른 확인
인덱스를 설정하고 재설정하는 방법을 얼마나 이해했는지 확인해 보세요.
레슨 요약
이 레슨에서는 다음을 배웠습니다. set_index('col')은 레이블 기반 접근을 위해 열을 행 인덱스로 승격하고, 목록을 전달하면 MultiIndex가 생성되며, reset_index()는 인덱스를 다시 열로 옮깁니다(drop=True를 사용하면 대신 인덱스를 삭제합니다). reindex()를 사용하면 누락된 위치를 NaN으로 채우면서 완전한 대상 인덱스에 맞출 수 있습니다. 이러한 기법은 이후에 배울 GroupBy 및 병합 레슨의 기초가 됩니다.
자주 묻는 질문
“인덱스 설정과 재설정” 강의는 무료인가요?
네 — “인덱스 설정과 재설정” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“인덱스 설정과 재설정”에서 뭘 배우나요?
set_index()로 열을 행 인덱스로 올리고 reset_index()로 되돌리며 MultiIndex의 개요를 살펴봅니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 4번째 강의입니다.
“인덱스 설정과 재설정” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 열 값으로 정렬하기
- 인덱스로 정렬하기
- 값 순위 매기기
- 인덱스 설정과 재설정