frame = pd.DataFrame({'a': range(7), 'b': range(7, 0, -1),
'c': ['one', 'one', 'one', 'two', 'two',
'two', 'two'],
'd': [0, 1, 2, 0, 1, 2, 3]})
frame
a b c d
0 0 7 one 0
1 1 6 one 1
2 2 5 one 2
3 3 4 two 0
4 4 3 two 1
5 5 2 two 2
6 6 1 two 3
원본 데이터 입니다.
이때 c, d를 인덱스로 설정하고 싶다면, frame.set_index(['c', 'd']) 하면 됩니다.
frame2 = frame.set_index(['c', 'd'])
frame2
a b
c d
one 0 0 7
1 1 6
2 2 5
two 0 3 4
1 4 3
2 5 2
3 6 1
보시다시피 c와 d를 기준으로 인덱스가 설정되었습니다.
이때도 계층적 인덱싱이 적용된 모습을 볼 수 있습니다.
만약 column에 있던 c와 d를 그대로 유지하면서 인덱스를 설정하고 싶다면, drop 파라미터에 False를 넘겨줍니다.
frame.set_index(['c', 'd'], drop=False)
a b c d
c d
one 0 0 7 one 0
1 1 6 one 1
2 2 5 one 2
two 0 3 4 two 0
1 4 3 two 1
2 5 2 two 2
3 6 1 two 3
기존의 c와 d는 그대로 유지됩니다.
이제 다시 reset_index() 함수를 사용해 인덱스를 초기화합시다.
frame2.reset_index()
c d a b
0 one 0 0 7
1 one 1 1 6
2 one 2 2 5
3 two 0 3 4
4 two 1 4 3
5 two 2 5 2
6 two 3 6 1
참고로 frame2에서는 c와 d가 인덱스였으므로 위치가 바뀝니다.