달나라 노트

Python Pandas : set_index (DataFrame의 index 변경하기) 본문

Python/Python Pandas

Python Pandas : set_index (DataFrame의 index 변경하기)

CosmosProject 2021. 7. 15. 00:31
728x90
반응형

 

 

 

 

 

 

 

DataFrame은 기본적으로 index가 0부터 1씩 증가하는 정수로 생성됩니다.

다만 set_index를 이용하면 DataFrame의 index를 원하는대로 변경할 수 있습니다.

 

 

 

Syntax

set_index(keys=[k1, k2, ...], inplace=True/False, drop=True/False)

사용법은 위와 같습니다.

 

keys=[k1, k2, ...]

index로 설정할 list 형태의 데이터입니다.

index는 보통 1줄이지만 2줄 3줄 또는 그 이상이 될 수도 있습니다. (다중 index가 가능하다는 의미입니다.)

k1은 index 한 줄 이라고 보시면 됩니다.

예를들어 총 10행의 데이터를 가진 DataFrame의 index를 변경하려면 k1의 자리에 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 처럼 DataFrame의 행 개수와 동일한 list, Series 또는 DataFrame의 column name 을 전달해야 합니다.

 

 

inplace=True/False

True --> set_index가 적용된 DataFrame 자체를 변경

False --> set_index가 적용된 DataFrame은 원본 그대로 두고 다른 변수에 set_index가 적용된 DataFrame을 할당

(False가 default 값입니다.)

 

 

drop=True/False

True --> set_index의 key에 사용된 column을 index로 옮기고 column에서 삭제

False --> set_index의 key에 사용된 column을 index로 옮기고 column에서도 유지

(True가 default 값입니다.)

 

 

 

 

 

 

import pandas as pd

dict_1 = {
    'col1': [1, 2, 3, 4, 5],
    'col2': [6, 7, 8, 9, 10],
    'col3': [11, 12, 13, 14, 15],
    'col4': [16, 17, 18, 19, 20]
}

df_1 = pd.DataFrame(dict_1)
print(df_1)

df_2 = df_1.set_index(keys=['col1'], inplace=False, drop=False)
print(df_2)

df_3 = df_1.set_index(keys=['col1'], inplace=False, drop=True)
print(df_3)



-- Result
   col1  col2  col3  col4
0     1     6    11    16
1     2     7    12    17
2     3     8    13    18
3     4     9    14    19
4     5    10    15    20

      col1  col2  col3  col4
col1                        
1        1     6    11    16
2        2     7    12    17
3        3     8    13    18
4        4     9    14    19
5        5    10    15    20

      col2  col3  col4
col1                  
1        6    11    16
2        7    12    17
3        8    13    18
4        9    14    19
5       10    15    20

위 예시를 봅시다.

set_index의 keys에는 ['col1']이 명시되어있습니다.

df_1에 존재하는 col1이라는 column의 data를 DataFrame의 index로 옮기겠다는 뜻입니다.

 

inplace=False임으로 보아

df_1 자체에는 변형을 가하지 않고, set_index를 적용한 후 df_2 또는 df_3에 할당하고있겠네요.

 

df_2와 df_3의 차이를 보면 drop이 True인지 False인지가 차이납니다.

df_2는 drop=False이므로 col1이 결과에서도 존재하지만

df_3는 drop=True이므로 index의 셋팅에 사용된 col1이 DataFrame에서 삭제된 것을 볼 수 있습니다.

 

 

 

 

 

 

 

 

import pandas as pd

dict_1 = {
    'col1': [1, 2, 3, 4, 5],
    'col2': [6, 7, 8, 9, 10],
    'col3': [11, 12, 13, 14, 15],
    'col4': [16, 17, 18, 19, 20]
}

df_1 = pd.DataFrame(dict_1)
print(df_1)

df_4 = df_1.set_index(keys=['col1', 'col2'], inplace=False, drop=True)
print(df_4)



-- Result
   col1  col2  col3  col4
0     1     6    11    16
1     2     7    12    17
2     3     8    13    18
3     4     9    14    19
4     5    10    15    20

           col3  col4
col1 col2            
1    6       11    16
2    7       12    17
3    8       13    18
4    9       14    19
5    10      15    20

index는 반드시 1개일 필요는 없습니다.

위 예시처럼 index를 2줄 또는 그 이상으로 설정할 수도 있습니다.

 

 

 

 

 

 

 

 

 

 

import pandas as pd

dict_1 = {
    'col1': [1, 2, 3, 4, 5],
    'col2': [6, 7, 8, 9, 10],
    'col3': [11, 12, 13, 14, 15],
    'col4': [16, 17, 18, 19, 20]
}

df_1 = pd.DataFrame(dict_1)
print(df_1)

s = pd.Series(['a', 'b', 'c', 'd', 'e'])
df_5 = df_1.set_index(keys=[s], inplace=False)
print(df_5)

l = ['f', 'g', 'h', 'i', 'j']
df_6 = df_1.set_index(keys=[l], inplace=False)
print(df_6)



-- Result
   col1  col2  col3  col4
0     1     6    11    16
1     2     7    12    17
2     3     8    13    18
3     4     9    14    19
4     5    10    15    20

   col1  col2  col3  col4
a     1     6    11    16
b     2     7    12    17
c     3     8    13    18
d     4     9    14    19
e     5    10    15    20

   col1  col2  col3  col4
f     1     6    11    16
g     2     7    12    17
h     3     8    13    18
i     4     9    14    19
j     5    10    15    20

또한 단순히 keys의 인자로서 DataFrame내에 존재하는 column이 아닌

Series나 list를 전달할 수도 있습니다.

다만 DataFrame의 행 개수와 동일한 길이어야 합니다.

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments