본문 바로가기

카테고리 없음

[파이썬] Pandas 데이터 정렬하기: sort_index(), sort_values()

이번에는 데이터를 정렬하는 방법을 알아보겠습니다. 데이터를 정렬하는 기준은 크게 두가지가 있습니다. 1) .sort_index()를 사용하는 방법과 2) .sort_values()를 사용하는 방법입니다.

 

이름에서 유추할 수 있듯이 .sort_index()는 인덱스(index)를 기준으로, .sort_values()는 컬럼의 값을 기준으로 데이터를 정렬합니다.

 

.sort_index()를 사용하여 데이터 정렬하기

In [1]:

# 판다스 라이브러리 임포트
import pandas as pd
# plotly express에 내장되어있는 gapminder 데이터프레임을 사용하겠습니다.
import plotly.express as px
df = px.data.gapminder()

# 데이터 df를 인덱스를 기준으로 정렬합니다.
# 기본 정렬 방식은 오름차순(ascending)입니다.
# 내림차순으로 정렬하고 싶다면 ascending 옵션을 False로 설정하면 됩니다.
df_sorted_by_index = df.sort_index(ascending=False)

# 정렬 결과를 출력합니다.
df_sorted_by_index.head()
 
Out[1]:
 
  country continent year lifeExp pop gdpPercap iso_alpha iso_num
1703 Zimbabwe Africa 2007 43.487 12311143 469.709298 ZWE 716
1702 Zimbabwe Africa 2002 39.989 11926563 672.038623 ZWE 716
1701 Zimbabwe Africa 1997 46.809 11404948 792.449960 ZWE 716
1700 Zimbabwe Africa 1992 60.377 10704340 693.420786 ZWE 716
1699 Zimbabwe Africa 1987 62.351 9216418 706.157306 ZWE 716

 

.sort_values()를 사용하여 데이터 정렬하기

sort_values()의 경우에는 어떤 컬럼의 값을 기준으로 정렬해야 하는지 명시적으로 설정해야하기 때문에, by 옵션에 정렬 기준이되는 컬럼명을 집어넣습니다.
 
In [2]:
# 데이터 df를 year 컬럼의 값을 기준으로 정렬합니다.
# 기본 정렬 방식은 오름차순(ascending)입니다.
# 내림차순으로 정렬하고 싶다면 ascending 옵션을 False로 설정하면 됩니다.
df_sorted_by_values = df.sort_values(by='year' ,ascending=False)

# 정렬 결과를 출력합니다.
df_sorted_by_values.head()

 

Out[2]:
 
  country continent year lifeExp pop gdpPercap iso_alpha iso_num
1703 Zimbabwe Africa 2007 43.487 12311143 469.709298 ZWE 716
491 Equatorial Guinea Africa 2007 51.579 551201 12154.089750 GNQ 226
515 Ethiopia Africa 2007 52.947 76511887 690.805576 ETH 231
527 Finland Europe 2007 79.313 5238460 33207.084400 FIN 246
539 France Europe 2007 80.657 61083916 30470.016700 FRA 250

 

여러 개의 컬럼을 기준으로 정렬하고 싶다면 by 옵션에 리스트를 집어넣으면 됩니다.

 

In [3]:

# 데이터 df를 [year, pop] 컬럼의 값을 기준으로 정렬합니다.
# 기본 정렬 방식은 오름차순(ascending)입니다.
# 내림차순으로 정렬하고 싶다면 ascending 옵션을 False로 설정하면 됩니다.
df_sorted_by_values = df.sort_values(by=['year', 'pop'] ,ascending=False)

# 정렬 결과를 출력합니다.
df_sorted_by_values.head()
 
Out[3]:
 
  country continent year lifeExp pop gdpPercap iso_alpha iso_num
299 China Asia 2007 72.961 1318683096 4959.114854 CHN 156
707 India Asia 2007 64.698 1110396331 2452.210407 IND 356
1619 United States Americas 2007 78.242 301139947 42951.653090 USA 840
719 Indonesia Asia 2007 70.650 223547000 3540.651564 IDN 360
179 Brazil Americas 2007 72.390 190010647 9065.800825 BRA 76

 

정렬 후 .head()를 이용해서 상위 N개 행을 선택하거나, .tail()를 이용해서 하위 N개 행을 선택하면 결과를 확인하기 편리합니다.

 

 

-이 글은 아나콘다(Anaconda3)가 설치된 환경을 기준으로 작성되었습니다.