Pandas DataFrame에서 계층적 열 인덱스를 평평하게 만드는 방법
reset_index() 메서드 사용:
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.reset_index(level='col1')
print(df)
결과:
col2 A B C
0 1 1 4 7
1 2 2 5 8
2 3 3 6 9
설명:
reset_index()
메서드는 계층적 인덱스의 한 레벨을 기본 행 인덱스로 변환합니다.level
키워드 인수를 사용하여 평평하게 만들려는 인덱스 레벨을 지정할 수 있습니다.- 이 경우
level='col1'
을 지정하여 'col1' 인덱스 레벨을 평평하게 만듭니다.
stack() 및 unstack() 메서드 사용:
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.stack()
df = df.unstack(fill_value=-11414) # -11414는 임의의 값으로 변경 가능
print(df)
col2
A 1 2 3
B 4 5 6
C 7 8 9
stack()
메서드는 계층적 열 인덱스를 다차원 행 인덱스로 변환합니다.- 이 예에서는
stack()
을 사용하여 열 인덱스를 행 인덱스로 변환하고unstack()
을 사용하여 새로운 열 이름으로 만들어 평평하게 만듭니다.
melt() 함수 사용:
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.melt(id_vars=['col1'], var_name='col2', value_name='value')
print(df)
col1 col2 value
0 X A 1
1 X A 2
2 X A 3
3 X B 4
4 X B 5
5 X B 6
6 Y A 7
7 Y A 8
8 Y A 9
melt()
함수는 다차원 DataFrame을 평평한 DataFrame으로 변환합니다.id_vars
키워드 인수를 사용하여 평평한 DataFrame에 유지하려는 열을 지정할 수 있습니다.var_name
및value_name
키워드 인수를 사용하여 새로운 열
예제 코드
reset_index() 메서드 사용
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.reset_index(level='col1')
print(df)
- 이 코드는 위의 설명에 따라
reset_index()
메서드를 사용하여 계층적 열 인덱스를 평평하게 만듭니다.
출력:
col2 A B C
0 1 1 4 7
1 2 2 5 8
2 3 3 6 9
stack() 및 unstack() 메서드 사용
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.stack()
df = df.unstack(fill_value=-11414) # -11414는 임의의 값으로 변경 가능
print(df)
fill_value
키워드 인수를 사용하여 누락된 값을 채울 수 있습니다. 이 예에서는 -11414를 사용했지만 원하는 값으로 변경할 수 있습니다.
col2
A 1 2 3
B 4 5 6
C 7 8 9
melt() 함수 사용
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.melt(id_vars=['col1'], var_name='col2', value_name='value')
print(df)
id_vars
키워드 인수를 사용하여 'col1' 열을 평평한 DataFrame에 유지합니다.var_name
및value_name
키워드 인수를 사용하여 새로운 열 이름을 'col2' 및 'value'로 설정합니다.
col1 col2 value
0 X A 1
1 X A 2
2 X A 3
3 X B 4
4 X B 5
5 X B 6
6 Y A 7
7 Y A 8
8 Y A 9
주의:
- 위 코드는 예시이며, 실제 데이터에 따라 코드를 수정해야 할 수도 있습니다.
reset_index()
, `stack
Pandas DataFrame에서 계층적 열 인덱스를 평평하게 만드는 대체 방법
iloc() 슬라이싱 사용:
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.iloc[:, 0:1] # 첫 번째 열만 선택
print(df)
A
0 1
1 2
2 3
iloc()
슬라이싱을 사용하여 원하는 열을 선택할 수 있습니다.- 이 예에서는
iloc[:, 0:1]
을 사용하여 첫 번째 열만 선택하여 평평하게 만듭니다.
xs() 메서드 사용:
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.xs('A', level='col2')
print(df)
A
0 1
1 2
2 3
xs()
메서드를 사용하여 특정 레벨 값에 해당하는 데이터를 선택할 수 있습니다.- 이 예에서는
xs('A', level='col2')
을 사용하여 'col2' 레벨 값이 'A'인 데이터만 선택하여 평평하게 만듭니다.
groupby() 및 agg() 메서드 사용:
import pandas as pd
# 계층적 열 인덱스가 있는 DataFrame 만들기
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6], 'C': [7, 8, 9]},
index=pd.MultiIndex.from_tuples([('X', 1), ('X', 2), ('Y', 3)],
names=['col1', 'col2']))
# 열 인덱스를 평평하게 만들기
df = df.groupby('col1').agg('first')
print(df)
A B C
col1
X 1 4 7
Y 3 6 9
groupby()
및agg()
메서드를 사용하여 그룹별 집계 연산을 수행할 수 있습니다.- 이 예에서는
groupby('col1')
을 사용하여 'col1' 열별로 그룹화하고agg('first')
를 사용하여 각 그룹의 첫 번째 값을 선택하여 평평하게 만듭니다.
- 각 방법의 장단점을 고려하여 상황에 맞는 방법을 선택하는 것이 중요합니다.
추가 정보:
- Pandas `xs
python pandas dataframe