swapaxes
메서드는 행/열을 바꿔주는 메서드입니다. 값들도 교환됩니다.
axis1
, axis2
: {0 : index / 1 : columns} 교환할 행과 열 입니다.
copy
: 사본을 생성할지 여부입니다.
idx = ['row1','row2']
col = ['col1','col2']
data= [['A','B'],[1,2]]
df = pd.DataFrame(data, idx, col)
print(df)
axis1
과 axis2
에 행/열을 지정하여 교환할 수 있습니다. 행<->열 교환이나 열<->행 교환이나 완벽히 동일합니다.
print(df.swapaxes(axis1=0,axis2=1))
>>
row1 row2
col1 A 1
col2 B 2
axis1
과 axis2
이 같다면, 당연히 원래 값과 같습니다.
print(df.swapaxes(axis1=1,axis2=1))
>>
col1 col2
row1 A B
row2 1 2
rename
메서드는 레이블의 이름을 변경하는 메서드 입니다.
mapper
: 변경할 {레이블명 : 값} 입니다. dict
나 함수
형태가 올 수 있는데, 축이 지정되어있지 않으므로 axis
인수와 함께 사용해야 합니다.
axis
: mapper
의 변경값이 적용될 축 입니다.
index
, columns
: 변경할 {레이블명 : 값}입니다. 미리 축을 지정하기 때문에 axis
인수와 병행사용할 수 없습니다.
copy
: 사본을 생성할지 여부입니다.
inplace
: Pandas 공통 인수인 inplace
는 원본을 수정할지의 여부를 지정합니다.
level
: Multi Index의 경우 레벨을 지정해줍니다.
errors
: {'ignore' / 'raise'} mapper
, index
, columns
에서 지정한 dict
에 해당하는 key
값이 없을경우, 오류를 발생시킬지 여부 입니다.
data= [['-','-'],['-','-']]
df1 = pd.DataFrame(data)
print(df1)
>>
0 1
0 - -
1 - -
mapper와 axis를 이용하는 방법
mapper
를 이용해 변경 내용을 설정해준 경우, axis
인수를 이용해 적용 축을 설정해주어야합니다.
print(df1.rename(mapper={0:'col1',1:'col2'}, axis=1))
>>
# mapper를 통해 0을 col1로, 1을 col2로 설정하고 축을 열(1:columns)로 설정
col1 col2
0 - -
1 - -
index나 columns를 이용하는 방법
index
나 columns
에 변경 내용을 설정해주는 경우 axis
설정 없이 적용이 됩니다.
# index에 변경값을 입력
print(df1.rename(index = {0:'row1',1:'row2'}))
#인덱스의 0번째와 1번째 인덱스 변경
>>
0 1
row1 - -
row2 - -
inplace인수를 이용한 원본 변경
pandas 공통사항으로 inplace=True
인 경우 원본의 값이 변경됩니다.
df1.rename(index={0:'row1',1:'row2'}, columns={0:'col1',1:'col2'},inplace=True)
print(df1)
>>
col1 col2
row1 - -
row2 - -
먼저 예시를 위한 Multi Index를 만들어 보겠습니다
idx = [['row1','row1','row2','row2'],[1,2,3,4]]
col = ['col1','col2']
data = [['-','-'],['-','-'],['-','-'],['-','-']]
df2 = pd.DataFrame(data, idx, col)
print(df2)
>>
col1 col2
row1 1 - -
2 - -
row2 3 - -
4 - -
level의 지정
Multi Index의 경우 rename
으로 레이블명을 변경할 경우 level
을 통해 레벨을 설정해주어야 합니다.
print(df2.rename(level=1, index={1:'val1',2:'val2',3:'val3',4:'val4',5:'val5'}))
>>
col1 col2
row1 val1 - -
val2 - -
row2 val3 - -
val4 - -
레벨1 의 인덱스가 변경된 것을 확인할 수 있습니다. 그런데 { ... , 5:'val5'}
는 존재하지 않는 인덱스인데, 오류가 발생하지 않았습니다.
이는 errors
인수를 통해 오류 발생이 가능합니다.
errors인수의 사용
errors
는 기본적으로 ignore
으로 존재하지 않은 인덱스에 대해 dict
를 입력하더라도 오류를 발생시키지 않습니다.
위의 예시를 errors='raise'
를 이용하여 다시 실행해보겠습니다.
print(df2.rename(errors='raise',level=1, index={1:'val1',2:'val2',3:'val3',4:'val4',5:'val5'}))
>>
오류 발생
KeyError: '[1, 2, 3, 4, 5] not found in axis'
rename_axis
메서드는 축의 이름을 지정하는 메서드입니다.
mapper
: 변경할 값 입니다. dict
나 함수
, 스칼라
형태가 올 수 있는데, 축이 지정되어있지 않으므로 axis
인수와 함께 사용해야 합니다.
axis
: mapper
의 변경값이 적용될 축 입니다.
index
, columns
: 변경할 축을 지정해서 값을 변경합니다.
copy
: 사본을 생성할지 여부입니다.
inplace
: Pandas 공통 인수인 inplace
는 원본을 수정할지의 여부를 지정합니다.
df = pd.DataFrame(data=[['-','-'],['-','-']],index=['row1','row2'],columns=['col1','col2'])
print(df)
>>
col1 col2
row1 - -
row2 - -
mapper와 axis를 이용하는 방법
mapper
를 통해 변경값을 지정해주는 경우 axis
를 통해 적용될 축을 지정해주어야 합니다.
df = df.rename_axis(mapper='index',axis=0)
#index라는 행의 축을 추가한다
print(df)
>>
col1 col2
index
row1 - -
row2 - -
index나 columns를 이용하는 경우
index
나 columns
에 값을 지정해주는경우 별도의 축을 지정해줄 필요가 없습니다.
df = df.rename_axis(columns='columns')
print(df)
>>
columns col1 col2
index
row1 - -
row2 - -
inplace의 사용
pandas 공통사항으로 inplace=True
인 경우 원본을 변경하게 됩니다. 지정해준 축 이름을 대문자로 변경하는 함수와 함께 inplace
를 사용해보겠습니다.
df.rename_axis(index=str.upper, columns=str.upper, inplace=True)
print(df)
>>
COLUMNS col1 col2
INDEX
row1 - -
row2 - -
set_axis
메서드는 레이블명을 원하는 값으로 변경하는 메서드입니다.
labels
: 변경할 이름입니다. list
형태로 사용 가능합니다.
axis
: {0 : index / 1 : columns} 변경값을 적용할 축 입니다.
inplace
: pandas 공통인수인 inplace
는 True
인 경우 원본을 변경하게 됩니다.
df = pd.DataFrame(data=[[1,2],[3,4]])
print(df)
>>
0 1
0 1 2
1 3 4
labels
에 변경할 값을 입력하고, axis
를 통해 축을 설정해주어서 레이블명을 변경할 수 있습니다.
df=df.set_axis(labels=['row1','row2'],axis=0)
#행 레이블 변경
print(df)
>>
0 1
row1 1 2
row2 3 4
df = df.set_axis(labels=['col1','col2'],axis=1)
#열 레이블 변경
print(df)
>>
col1 col2
row1 1 2
row2 3 4
set_index
메서드는 기존의 열을 인덱스로 설정하는 메서드입니다.
keys
: 인덱스로 설정할 열의 이름입니다. list
형태로 설정할 경우 Multi Index로 설정됩니다.
drop
: 인덱스로 설정한 열을 기존 열에서 제거할지 여부입니다. 기본값은 True
로 열에서 제거됩니다.
append
: 기존 인덱스를 유지하면서 새 인덱스를 추가할 지 여부입니다.
inplace
: pandas 공통 인수로 원본을 대체할지 여부입니다.
verify_integrity
: 추가하려는 인덱스에 중복값이 있을경우 오류를 띄울지 여부 입니다.
data={'col1':['A','A','A','B','B'],
'col2':['[1]','[2]','[3]','[1]','[2]'],
'col3':[2,5,3,4,1],
'col4':['X','X','Y','Z','Z']}
idx=['row1','row2','row3','row4','row5']
df = pd.DataFrame(data=data,index=idx)
print(df)
>>
col1 col2 col3 col4
row1 A [1] 2 X
row2 A [2] 5 X
row3 A [3] 3 Y
row4 B [1] 4 Z
row5 B [2] 1 Z
기본적인 사용법
keys
로 인덱스가 될 열 이름을 지정할 수 있습니다.
# col1을 인덱스로 만들기
print(df.set_index(keys='col1'))
>>
col2 col3 col4
col1
A [1] 2 X
A [2] 5 X
A [3] 3 Y
B [1] 4 Z
B [2] 1 Z
keys
에 list
가 입력될 경우 Multi Index 형태로 설정이 됩니다.
print(df.set_index(keys=['col1','col2']))
>>
col3 col4
col1 col2
A [1] 2 X
[2] 5 X
[3] 3 Y
B [1] 4 Z
[2] 1 Z
append 인수의 사용
append
인수를 True
로 설정 할 경우 기존 Index를 유지하고 새 인덱스를 추가하게됩니다.
print(df.set_index(keys='col1',append=True))
>>
col2 col3 col4
col1
row1 A [1] 2 X
row2 A [2] 5 X
row3 A [3] 3 Y
row4 B [1] 4 Z
row5 B [2] 1 Z
drop 인수의 사용
drop
인수가 False
일 경우 인덱스가 설정된 이후에도 해당 열이 유지됩니다.
기본값은 True
로 keys
에 설정된 열이 인덱스로 설정될 경우 열이 삭제됩니다.
print(df.set_index(keys='col1',drop=False))
>>
col1 col2 col3 col4
col1
A A [1] 2 X
A A [2] 5 X
A A [3] 3 Y
B B [1] 4 Z
B B [2] 1 Z
#col1 이 그대로 유지되어있는것을 확인할 수 있습니다.<br>
verify_integrity인수의 사용
verify_integrity
인수의 기본값은 False
로 인덱스에 중복된 값이 있더라도 출력합니다. 만약 True
일 경우 중복값이 있다면 오류를 출력하게 됩니다.
# 기본값은 False로 중복을 허용
print(df.set_index(keys='col4'))
>>
col1 col2 col3
col4
X A [1] 2
X A [2] 5
Y A [3] 3
Z B [1] 4
Z B [2] 1
# True일 경우 인덱스에 중복값이 있다면 오류를 출력하게됩니다.<br>
print(df.set_index(keys='col4',verify_integrity=True))
>>
오류 발생
ValueError: Index has duplicate keys: Index(['X', 'Z'], dtype='object', name='col4')
add_suffix
와 add_preffix
메서드는 각각 열 이름에 접미사/접두사를 붙이는 메서드 입니다.
suffix / prefix
: 열 이름에 추가할 문자열입니다.
df = pd.DataFrame(data=[[1,2],[3,4]])
print(df)
>>
0 1
0 1 2
1 3 4
기본적인 사용법
add_suffix
메서드를 이용할 경우 열 이름의 뒤쪽에 해당 문자열이 붙게 됩니다.
print(df.add_suffix('_열'))
>>
#뒤에 붙여준다
0_열 1_열
0 1 2
1 3 4
add_prefix
메서드를 이용할 경우 열 이름의 앞쪽에 해당 문자열이 붙게 됩니다.
print(df.add_prefix('열_'))
>>
#앞에 붙여준다
열_0 열_1
0 1 2
1 3 4
reindex
메서드는 인덱스를 새 인덱스로 덮어씌우고 내용을 채우는 메서드 입니다.
labels
: 변경할 값입니다. labels
인수를 이용할 경우 axis
인수를 통해 축을 지정해줘야합니다. 추가된 index의 경우 NaN
을 요소로 갖습니다.
index / columns
: 변경할 값입니다. 행과 열을 미리 지정해줍니다. 추가된 index의 경우 NaN
을 요소로 갖습니다.
method
: {bfill / ffill / nearest이 결측치를 채울 규칙입니다.
ffill : 바로 전 값으로 결측치를 채웁니다.
bfill : 바로 뒤 값으로 결측치를 채웁니다.
nearest : 근처의 유효값으로 결측치를 채웁니다.
※ 결측치를 채울 때 값의 전/후 값을 기준으로하는것이 아닌 인덱스의 전/후 인덱스를 기준으로 합니다.
copy
: 사본을 생성할지 여부입니다.
level
: Multi Index의 경우 레벨을 선택할 수 있습니다.
fill_value
: 결측값을 이 값으로 변경할 수 있습니다.
limit
: method
인수를 사용할 경우 몇개까지 변경할지 제한할 수 있습니다
tolerance
: method
인수를 사용할 때 index가 다를 경우 허용 범위 입니다.
★│변경 전 인덱스 - 변경 후 인덱스│≤ tolerance
를 만족하게 method
적용 허용 범위를 정할 수 있습니다. 자세한건 예시 참고바랍니다.
idx = [3,6,11]
col = ['col1','col2','col3','col4']
data = [[1,2,3,4],[2,4,6,8],[3,6,9,12]]
df = pd.DataFrame(data,idx,col)
print(df)
>>
col1 col2 col3 col4
3 1 2 3 4
6 2 4 6 8
11 3 6 9 12
기본적인 사용법(+fill_value인수)
기본적으로 새 index가 될 list를 형성하고 labels / axis
나 index / columns
를 사용해서 적용 할 수 있습니다.
labels / axis
를 이용할 경우
col2 = ['col1','idx2','idx3','col4']
print(df.reindex(labels=col2,axis=1)) # labels로 변경값을 정해주면 axis를 이용해 적용할 축을 지정해줘야함.
>>
col1 idx2 idx3 col4
3 1 NaN NaN 4
6 2 NaN NaN 8
11 3 NaN NaN 12
index / columns
를 이용할 경우
print(df.reindex(columns=col2)) # index나 columns를 이용해 대상 축에 변경값을 바로 적용할 수 있다.
>>
col1 idx2 idx3 col4
3 1 NaN NaN 4
6 2 NaN NaN 8
11 3 NaN NaN 12
fill_value
를 설정하면 NaN
을 원하는 값으로 지정하여 변경할 수 있습니다.
print(df.reindex(columns=col2,fill_value='-'))
>>
col1 idx2 idx3 col4
3 1 - - 4
6 2 - - 8
11 3 - - 12
method 와 limit의 사용
method
를 이용하면 결측치를 앞/뒤/근처의 인덱스를 기준으로 변경이 가능합니다.
먼저 기존 열에 새 열을 reindex
메서드를 이용해 추가해보겠습니다.
col3 = ['col0','col1','col2','col3','col4','col5','col6','col7']
print(df.reindex(columns=col3))
>>
col0 col1 col2 col3 col4 col5 col6 col7 #새로 추가된 열은 NaN을 가진다.
3 NaN 1 2 3 4 NaN NaN NaN
6 NaN 2 4 6 8 NaN NaN NaN
11 NaN 3 6 9 12 NaN NaN NaN
method='bfill'
인 경우 뒤의 열의 값을 가져옵니다.
print(df.reindex(columns=col3,method='bfill'))
>>
col0 col1 col2 col3 col4 col5 col6 col7 # col0의 경우 뒤의 열인 col1의 값을 가져옴.
3 1 1 2 3 4 NaN NaN NaN # col5, col6, col7의 경우 뒤의 열이 없으니 변경 불가.
6 2 2 4 6 8 NaN NaN NaN
11 3 3 6 9 12 NaN NaN NaN
method='ffill'
인 경우 앞의 열의 값을 가져옵니다.
print(df.reindex(columns=col3,method='ffill'))
>>
col0 col1 col2 col3 col4 col5 col6 col7 # col0의 경우 앞에 열이 없으므로 변경 불가
3 NaN 1 2 3 4 4 4 4 # col5, col6, col7의 경우 앞의 열의 값을 가져옴
6 NaN 2 4 6 8 8 8 8
11 NaN 3 6 9 12 12 12 12
limit
는 method
로 변경할 열의 갯수를 제한할 수 있습니다.
print(df.reindex(columns=col3,method='ffill',limit=2))
>>
col0 col1 col2 col3 col4 col5 col6 col7 # ffill으로 변경할 열의 수를 2로 제한하였기때문에 col5, col6만 변경됨.
3 NaN 1 2 3 4 4 4 NaN
6 NaN 2 4 6 8 8 8 NaN
11 NaN 3 6 9 12 12 12 NaN
tolerance 인수의 사용
│변경 전 인덱스 - 변경 후 인덱스│≤ tolerance
를 만족하게 method
적용 허용 범위를 정할 수 있습니다.
tolerance=1
인 경우
idx2 = [4, 8, 14]
print(df.reindex(index=idx2,method='ffill',tolerance=1))
>>
col1 col2 col3 col4
4 1.0 2.0 3.0 4.0 # │3-4│=1 만족
8 NaN NaN NaN NaN # │6-8│ = 2 불만족
14 NaN NaN NaN NaN # │11-14│ = 3 불만족
tolerance=2
인 경우
idx2 = [4, 8, 14]
print(df.reindex(index=idx2,method='ffill',tolerance=2))
>>
col1 col2 col3 col4
4 1.0 2.0 3.0 4.0 # │3-4│=1 만족
8 2.0 4.0 6.0 8.0 # │6-8│=2 만족
14 NaN NaN NaN NaN # │11-14│=3 불만족
tolerance=3
인 경우
idx2 = [4, 8, 14]
print(df.reindex(index=idx2,method='ffill',tolerance=3))
>>
col1 col2 col3 col4
4 1 2 3 4 # │3-4│=1 만족
8 2 4 6 8 # │6-8│=2 만족
14 3 6 9 12 # │11-14│=3 만족
reindex_like
메서드는 other
의 인덱스를 기준으로 self
의 인덱스와 값을 적용하는 메서드입니다.
self.reindex_like(other, method=None, copy=True, limit=None, tolerance=None)
method
: {bfill / ffill / nearest이 결측치를 채울 규칙입니다.
ffill : 바로 전 값으로 결측치를 채웁니다.
bfill : 바로 뒤 값으로 결측치를 채웁니다.
nearest : 근처의 유효값으로 결측치를 채웁니다.
※ 결측치를 채울 때 값의 전/후 값을 기준으로하는것이 아닌 인덱스의 전/후 인덱스를 기준으로 합니다.
copy
: 사본을 생성할지 여부입니다.
limit
: method
인수를 사용할 경우 몇개까지 변경할지 제한할 수 있습니다
tolerance
: method
인수를 사용할 때 index가 다를 경우 허용 범위 입니다.
★│변경 전 인덱스 - 변경 후 인덱스│≤ tolerance
를 만족하게 method
적용 허용 범위를 정할 수 있습니다.
먼저 self
가 될 객체와, other
가 될 객체를 만들어보겠습니다.
col1 = ['col1','col3','col6']
idx1 = ['row0','row2','row3']
data1 = [['A','X','+'],['B','Y','-'],['C','Z','=']]
self = pd.DataFrame(data1, idx1, col1)
print(self)
>>
col1 col3 col6
row0 A X +
row2 B Y -
row3 C Z =
col2 = ['col1','col2','col3','col4','col5','col6']
idx2 = ['row1','row2','row3']
data2 = [[1,2,3,4,5,6],[2,3,6,8,10,12],[3,6,9,12,15,18]]
other = pd.DataFrame(data2, idx2, col2)
print(other)
>>
col1 col2 col3 col4 col5 col6
row1 1 2 3 4 5 6
row2 2 3 6 8 10 12
row3 3 6 9 12 15 18
reset_index
메서드는 설정 인덱스를 제거하고 기본 인덱스(0,1,2, ... , n)으로 변경하는 메서드 입니다.
level
: Multi Index의 경우 제거할 인덱스의 레벨을 설정할수 있습니다. 기본적으로 모든 레벨입니다.
drop
: 제거한 인덱스를 열에 추가할지 여부입니다. 기본값은 False
로 제거된 인덱스는 열로 변환됩니다.
inplace
: pandas 공통 인수로, 원본을 변경할지 여부 입니다.
col_level / col_fill
: Multi Index의 경우 제거된 인덱스를 열에 추가할 때 레벨과 열의 이름을 설정할 수 있습니다.
col_level
을 통해 레벨을 설정하고, col_fill
을통해 해당 열의 이름을 정합니다.
df = pd.DataFrame([[1,2],[3,4],[5,6]],['row1','row2','row3'],['col1','col2'])
print(df)
>>
col1 col2
row1 1 2
row2 3 4
row3 5 6
.
기본적인 사용법(+drop, inplace)
기본적으로 아무 인수 없이 사용하게 되면, 모든 레벨에 대해 인덱스가 제거되며, 열에 추가됩니다.
print(df.reset_index())
>>
# index라는 열이 생성되고 기존 인덱스가 기본 인덱스로 변경됨
# 기존 인덱스는 열로 변함
index col1 col2
0 row1 1 2
1 row2 3 4
2 row3 5 6
drop = True
인 경우 열이 밖으로 꺼내지는게 아니라 완전히 삭제됩니다
print(df.reset_index(drop=True))
>>
#밖으로 꺼내지는게 아닌 완전한 삭제를 합니다
col1 col2
0 1 2
1 3 4
2 5 6
inplace=True
인 경우 원본이 변경되게 됩니다.
Copydf.reset_index(inplace=True)
print(df)
>>
index col1 col2
0 row1 1 2
1 row2 3 4
2 row3 5 6
Multi Index의 예시를 위하여 4x4짜리 Multi Index를 하나 생성하겠습니다.
idx = [['IDX1','IDX1','IDX2','IDX2'],['row1','row2','row3','row4']]
col = [['COL1','COL1','COL2','COL2'],['val1','val2','val3','val4']]
data = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
df2 = pd.DataFrame(data,idx,col)
print(df2)
>>
COL1 COL2
val1 val2 val3 val4
IDX1 row1 1 2 3 4
row2 5 6 7 8
IDX2 row3 9 10 11 12
row4 13 14 15 16
기본적인 사용법(+level)
Multi Index의 경우 level
을 설정해줌으로서 제거할 인덱스의 레벨을 선택할 수 있습니다.
level
을 입력하지 않은 경우 모든 index에 대해서 수행됩니다.
print(df2.reset_index())
>>
level_0 level_1 COL1 COL2
val1 val2 val3 val4
0 IDX1 row1 1 2 3 4
1 IDX1 row2 5 6 7 8
2 IDX2 row3 9 10 11 12
3 IDX2 row4 13 14 15 16
level=0
인 경우
print(df2.reset_index(level=0))
>>
level_0 COL1 COL2
val1 val2 val3 val4
row1 IDX1 1 2 3 4
row2 IDX1 5 6 7 8
row3 IDX2 9 10 11 12
row4 IDX2 13 14 15 16
level=1
인 경우
print(df2.reset_index(level=1))
>>
level_1 COL1 COL2
val1 val2 val3 val4
IDX1 row1 1 2 3 4
IDX1 row2 5 6 7 8
IDX2 row3 9 10 11 12
IDX2 row4 13 14 15 16
col_fill / col_level의 사용
col_fill
을 이용하여 열로 변경되는 인덱스의 열 이름을 설정할 수 있습니다. COL0
으로 설정해보겠습니다.
print(df2.reset_index(level=1,col_fill='COL0'))
>>
level_1 COL1 COL2
COL0 val1 val2 val3 val4 #COL0이 열 이름으로 생성됨.
IDX1 row1 1 2 3 4
IDX1 row2 5 6 7 8
IDX2 row3 9 10 11 12
IDX2 row4 13 14 15 16
col_level
을 이용해 열 이름의 레벨을 정할 수 있습니다. COL0
을 다른 열이름에 맞게 LEVEL을 변경해보겠습니다.
print(df2.reset_index(level=1,col_fill='COL0',col_level=1))
>>
COL0 COL1 COL2
level_1 val1 val2 val3 val4
IDX1 row1 1 2 3 4
IDX1 row2 5 6 7 8
IDX2 row3 9 10 11 12
IDX2 row4 13 14 15 16
reorder_levels
메서드는 Multi Index에서 Index의 위치를 변경하는 메서드입니다.
order
: 새로 정렬할 인덱스 순서입니다. 리스트 형태입니다.
axis
: {0 : index / 1 : columns} 순서를 적용할 축 입니다.
idx = [['IDX1','IDX1','IDX2','IDX2'],['row1','row2','row3','row4']]
col = [['COL1','COL1','COL2','COL2'],['val1','val2','val3','val4']]
data = [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]]
df = pd.DataFrame(data,idx,col)
print(df)
>>
COL1 COL2
val1 val2 val3 val4
IDX1 row1 1 2 3 4
row2 5 6 7 8
IDX2 row3 9 10 11 12
row4 13 14 15 16
기본적인 사용법
order
에 리스트 형태의 level 순서를 입력하므로써 인덱스 순서의 변경이 가능합니다.
print(df.reorder_levels([1,0])) #인덱스 순서를 레벨1 - 레벨0으로 변경
>>
COL1 COL2
val1 val2 val3 val4
row1 IDX1 1 2 3 4
row2 IDX1 5 6 7 8
row3 IDX2 9 10 11 12
row4 IDX2 13 14 15 16
axis
를 설정하여 적용될 축을 지정할 수 있습니다.
print(df.reorder_levels([1,0],axis=1))
>>
val1 val2 val3 val4
COL1 COL1 COL2 COL2
IDX1 row1 1 2 3 4
row2 5 6 7 8
IDX2 row3 9 10 11 12
row4 13 14 15 16