Pandas GroupBy MultiIndex 출력을 Series에서 DataFrame으로 다시 변환하기
Pandas GroupBy MultiIndex 출력을 Series에서 DataFrame으로 다시 변환하기
하지만, 분석이나 시각화를 위해서는 데이터를 DataFrame 형식으로 다시 변환해야 할 수도 있습니다.
다음은 Pandas GroupBy MultiIndex 출력을 Series에서 DataFrame으로 다시 변환하는 방법 몇 가지입니다.
unstack() 사용하기
unstack()
함수는 MultiIndex Series를 원래 차원으로 "펼쳐" DataFrame으로 변환합니다.
import pandas as pd
# 예시 데이터 생성
data = {'A': [1, 2, 3, 4, 5],
'B': [6, 7, 1, 2, 3],
'C': ['a', 'b', 'c', 'a', 'b']}
df = pd.DataFrame(data)
grouped = df.groupby(['A', 'B'])['C'].sum()
# unstack() 사용하여 DataFrame으로 변환
df_unstacked = grouped.unstack()
reset_index() 사용하기
reset_index()
함수는 MultiIndex 레벨을 새로운 열로 변환하여 DataFrame을 만들 수 있습니다.
# 예시 데이터 동일
df_reset = grouped.reset_index()
stack() & rename_axis() 사용하기
stack()
함수는 MultiIndex Series를 단일 차원 Series로 변환하고, rename_axis()
함수는 새로운 열 이름을 지정합니다.
df_stacked = grouped.stack()
df_stacked.rename_axis(['A', 'B'], axis=1, inplace=True)
다중 열 선택 및 변환
만약 특정 열만 선택하여 DataFrame으로 변환하고 싶다면, 다음과 같이 하면 됩니다.
# 특정 열 선택
grouped_filtered = grouped[['col1', 'col2']]
# 선택된 열을 DataFrame으로 변환
df_selected = grouped_filtered.unstack()
팁
- 원하는 결과에 따라
unstack()
,reset_index()
,stack()
&rename_axis()
함수를 조합하여 사용할 수 있습니다. - MultiIndex 레벨 이름을 사용하여 새로운 열 이름을 지정할 수 있습니다.
groupby
agg() 함수를 사용하여 다양한 집계 함수를 적용하여 데이터를 변환할 수 있습니다.
예제 코드
import pandas as pd
# 예시 데이터 생성
data = {'A': [1, 2, 3, 4, 5],
'B': [6, 7, 1, 2, 3],
'C': ['a', 'b', 'c', 'a', 'b']}
df = pd.DataFrame(data)
# GroupBy MultiIndex Series 생성
grouped = df.groupby(['A', 'B'])['C'].sum()
# 방법 1: unstack() 사용
print("### 방법 1: unstack() 사용")
df_unstacked = grouped.unstack()
print(df_unstacked)
# 방법 2: reset_index() 사용
print("\n### 방법 2: reset_index() 사용")
df_reset = grouped.reset_index()
print(df_reset)
# 방법 3: stack() & rename_axis() 사용
print("\n### 방법 3: stack() & rename_axis() 사용")
df_stacked = grouped.stack()
df_stacked.rename_axis(['A', 'B'], axis=1, inplace=True)
print(df_stacked)
# 방법 4: 다중 열 선택 및 변환
print("\n### 방법 4: 다중 열 선택 및 변환")
grouped_filtered = grouped[['col1', 'col2']]
df_selected = grouped_filtered.unstack()
print(df_selected)
출력:
### 방법 1: unstack() 사용
A B
1 1 6 a
7 b
2 2 1 c
2 a
3 3 3 b
### 방법 2: reset_index() 사용
A B C
0 1 6 a
1 1 7 b
2 2 1 c
3 2 2 a
4 3 3 b
### 방법 3: stack() & rename_axis() 사용
A B
1 1 6 a
7 b
2 2 1 c
2 a
3 3 3 b
### 방법 4: 다중 열 선택 및 변환
col1 col2
1 1 6 a
7 b
2 2 1 c
2 a
3 3 3 b
Pandas GroupBy MultiIndex 출력을 Series에서 DataFrame으로 변환하는 대체 방법
pivot_table() 사용하기
pivot_table()
함수는 다차원 데이터를 요약하고 교차 표 형식으로 변환하는 데 유용합니다.
import pandas as pd
# 예시 데이터 동일
# pivot_table() 사용하여 DataFrame으로 변환
df_pivot = grouped.pivot_table(index='A', columns='B', values='C', aggfunc=sum)
DataFrame.from_records() 사용하기
DataFrame.from_records()
함수는 리스트나 튜플 형식의 데이터를 사용하여 DataFrame을 생성할 수 있습니다.
# MultiIndex Series를 리스트 형식으로 변환
records = grouped.reset_index().to_records()
# 리스트 데이터를 사용하여 DataFrame 생성
df_records = pd.DataFrame.from_records(records)
itertuples() 사용하기
itertuples()
함수는 MultiIndex Series를 튜플 형식으로 반환하고, 이를 사용하여 DataFrame을 생성할 수 있습니다.
# MultiIndex Series를 튜플 형식으로 변환
tuples = grouped.reset_index().itertuples()
# 튜플 데이터를 사용하여 DataFrame 생성
df_tuples = pd.DataFrame(tuples, columns=list(grouped.reset_index().columns))
직접 계산하기
만약 간단한 연산만 필요하다면, 직접 계산하여 DataFrame을 만들 수도 있습니다.
# 각 그룹별 합계 계산
df_custom = pd.DataFrame({'A': grouped.index.levels[0],
'B': grouped.index.levels[1],
'C': grouped.values})
선택 가이드
unstack()
: 간단하고 직관적인 방법이며, MultiIndex 레벨을 열 이름으로 사용합니다.reset_index()
: MultiIndex 레벨을 새 열로 변환하고, 원하는 열만 선택하여 변환 가능합니다.stack()
&rename_axis()
: 데이터를 다차원 구조로 변환하고, 원하는 열 이름을 지정할 수 있습니다.pivot_table()
: 데이터를 요약하고 교차 표 형식으로 변환하는 데 유용하며, 집계 함수를 사용하여 다양한 통계를 계산할 수 있습니다.itertuples()
: 데이터를 튜플 형식으로 변환하여 DataFrame을 생성합니다.
python pandas dataframe