Pandas에서 다중 레벨 열 인덱스에서 레벨 삭제하기
다음은 Pandas에서 다중 레벨 열 인덱스에서 레벨을 삭제하는 방법에 대한 단계별 안내입니다.
예제 데이터프레임:
import pandas as pd
# Create a DataFrame with a multi-level column index
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
index=['A', 'B', 'C'],
columns=[['X', 'Y'], ['A', 'B']])
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
레벨 0 삭제:
첫 번째 레벨을 삭제하려면 drop()
함수와 level
키워드를 사용합니다.
df.columns = df.columns.droplevel(level=0)
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
레벨 이름으로 삭제:
레벨 이름을 사용하여 삭제하려면 names
키워드를 추가합니다.
df.columns = df.columns.droplevel(level='X', axis=1)
print(df)
Output:
Y A B
A 2 3 4
B 5 6 7
C 8 9 10
여러 레벨 삭제:
여러 레벨을 삭제하려면 drop()
함수를 여러 번 호출하거나 axis
키워드를 사용하여 한 번에 여러 레벨을 지정합니다.
df.columns = df.columns.droplevel([0, 1])
print(df)
Output:
A B
A 3 4
B 6 7
C 9 10
주의 사항:
- 레벨 삭제는 데이터프레임 구조를 영구적으로 변경합니다. 변경 사항을 저장하기 전에 백업본을 만들어 주세요.
- 일부 Pandas 함수는 다중 레벨 열 인덱스를 지원하지 않을 수 있습니다. 이러한 경우 데이터프레임을 평평한 구조로 변환한 다음 함수를 적용해야 할 수도 있습니다.
예제 코드: 다중 레벨 열 인덱스에서 레벨 삭제
첫 번째 레벨 삭제
import pandas as pd
# Create a DataFrame with a multi-level column index
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
index=['A', 'B', 'C'],
columns=[['X', 'Y'], ['A', 'B']])
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
이 코드는 첫 번째 레벨을 삭제합니다.
df.columns = df.columns.droplevel(level=0)
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
레벨 이름으로 삭제
이 코드는 'X'라는 이름의 첫 번째 레벨을 삭제합니다.
df.columns = df.columns.droplevel(level='X', axis=1)
print(df)
Output:
Y A B
A 2 3 4
B 5 6 7
C 8 9 10
여러 레벨 삭제
df.columns = df.columns.droplevel([0, 1])
print(df)
Output:
A B
A 3 4
B 6 7
C 9 10
Pandas에서 다중 레벨 열 인덱스에서 레벨 삭제: 대체 방법
rename_axis() 함수:
rename_axis()
함수를 사용하여 레벨 이름을 변경하여 원하는 레벨을 효과적으로 제거할 수 있습니다.
import pandas as pd
# Create a DataFrame with a multi-level column index
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
index=['A', 'B', 'C'],
columns=[['X', 'Y'], ['A', 'B']])
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
df.columns = df.columns.rename_axis(['Y', 'A', 'B'], axis=1)
print(df)
Output:
Y A B
A 2 3 4
B 5 6 7
C 8 9 10
stack() 및 unstack() 함수:
stack()
함수를 사용하여 다중 레벨 열 인덱스를 평평한 구조로 변환하고, 원하는 레벨을 제거한 후 unstack()
함수를 사용하여 다시 다중 레벨 구조로 변환할 수 있습니다.
import pandas as pd
# Create a DataFrame with a multi-level column index
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
index=['A', 'B', 'C'],
columns=[['X', 'Y'], ['A', 'B']])
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
df_temp = df.stack().drop('X', axis=1).unstack()
print(df_temp)
Output:
Y A B
A 2 3 4
B 5 6 7
C 8 9 10
loc[] 인덱서:
loc[]
인덱서를 사용하여 원하는 레벨을 제외한 열을 선택하여 새로운 DataFrame을 만들 수 있습니다.
import pandas as pd
# Create a DataFrame with a multi-level column index
df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]],
index=['A', 'B', 'C'],
columns=[['X', 'Y'], ['A', 'B']])
print(df)
Output:
X Y A B
A 1 2 3 4
B 4 5 6 7
C 7 8 9 10
다음 코드는 'X' 레벨을 제외한 열을 선택합니다.
df_new = df.loc[:, df.columns.get_level_values(0) != 'X']
print(df_new)
Output:
Y A B
A 2 3 4
B 5 6 7
C 8 9 10
- 각 방법마다 장단점이 있으므로 상황에 따라 적절한 방법을 선택해야 합니다.
rename_axis()
함수는 레벨 이름을 변경하는 데 유용하지만 원하는 레벨을 완전히 제거하지는 않습니다.stack()
및unstack()
함수는 다중 레벨 구조를 변환하는 데 유용하지만 계산 비용이 많이 들 수 있습니다.loc[]
인덱서는 특정 레벨을 제외한 열을 선택하는 데 간편하지만 새로운 DataFrame을
python pandas