본문 바로가기

Pandas

DataFrame - 인덱스 설정, 정렬하기


import pandas as pd

# 범위 슬라이싱
exam_data = {'이름' : ['서준', '우현', '인아', '영철'],
             '수학' : [90, 80, 70, 30],
             '영어' : [98, 89, 95, 22],
             '음악' : [85, 95, 100, 55],
             '체육' : [100, 90, 90, 77]}

df = pd.DataFrame(exam_data)
print(df, "\n")

# 특정 열을 행 인덱스로 설정한다
ndf = df.set_index(['이름'])
print(ndf, "\n")

# 다른 컬럼을 행 인덱스로 설정
ndf = df.set_index(['음악'])
print(ndf, "\n")

# 2개 컬럼을 행 인덱스로 설정
ndf = df.set_index(['수학', '음악'])
print(ndf, "\n")

 

특정 컬럼을 행 인덱스로 설정하는 방법이다. 2개 이상의 컬럼을 조합해서 행 인덱스로 설정할 수 있는데, 테이블에서 2개 이상의 컬럼으로 메인키 설정하는 것과 같은 개념일 것 같다. 

 

dict_data = {'c0':[1,2,3], 'c1':[4,5,6], 'c2':[7,8,9], 'c3':[10,11,12], 'c4':[13,14,15]}
df = pd.DataFrame(dict_data, index=['r0', 'r1', 'r2'])
print(df, "\n")

# 인덱스 재지정한다
new_index = ['r0', 'r1', 'r2', 'r3', 'r4']
ndf = df.reindex(new_index)
print(ndf, "\n")

# NaN값을 0로  채우기
ndf2 = df.reindex(new_index, fill_value=0)
print(ndf2, "\n")

# 행 인덱스를 정수형으로 초기화
ndf3 = ndf2.reset_index()
print(ndf3, "\n")

 

기존에 설정해둔 행 인덱스를 다른 값으로 대체하는 방법이다. 실제 raw 갯수에 비해 인덱스 갯수가 많으면 'NaN'으로 채워지는데, 이때 'NaN' 대신에 다른 값으로 세팅할 수 있다. (fill_value). 정수형으로 다시 리셋할수도 있다. 

 

# 정렬하기
print(df, "\n")
ndf = df.sort_index(ascending=False)
print(ndf, "\n")

# 열 기준 정렬
ndf = df.sort_values(by='c1', ascending=True)
print(ndf, "\n")

 

행인데스로 정렬할 수도 있도, 인덱스 컬럼이 아닌 컬럼기준으로도 정렬가능하다 (sort_values) 


Where there is a will there is a way