[Python] 데이터 정렬 (sort, arrange) : DataFrame.sort_values(), sorted(), list.sort()
Python 분석과 프로그래밍/Python 데이터 전처리 2016. 12. 31. 21:23이번 포스팅에서는 데이터 프레임, 튜플, 리스트를 특정한 기준에 따라서 정렬, 재배치하는 방법에 대해서 알아보겠습니다.
오름차순 혹은 내림차순으로 정렬을 한 후에 상위 n개 (or 하위 n개), 혹은 첫번째 행 (or 마지막 행) 을 선택해야할 필요가 있을 때 사용할 수 있는 method, function 입니다.
DataFrame, Tuple, List 정렬 순서대로 소개하겠습니다.
- (1) DataFrame 정렬 : DataFrame.sort_values()
- (2) Tuple 정렬 : sorted(tuple, key)
- (3) List 정렬 : list.sort(), sorted(list)
* 참고: Numpy 배열 정렬 np.sort() : http://rfriend.tistory.com/357
(1) DataFrame 정렬 : DataFrame.sort_values() |
먼저 필요한 모듈을 불러오고, 예제 DataFrame을 만들어보겠습니다.
In [1]: import pandas as pd In [2]: personnel_df = pd.DataFrame({'sequence': [1, 3, 2], ...: 'name': ['park', 'lee', 'choi'], ...: 'age': [30, 20, 40]}) In [3]: personnel_df Out[3]: age name sequence
|
(1-1) 'sequence' 열(by='sequence')을 기준으로 index(axis=0) 오름차순 정렬하기
# sorting index of DataFrame by a specific column : axis=0, columns In [4]: personnel_df.sort_values(by=['sequence'], axis=0) Out[4]: age name sequence
|
(1-2) 내림차순(descending)으로 정렬하기 : ascending=False
# sorting index of dataFrame in descending order : ascending=False In [5]: personnel_df.sort_values(by=['sequence'], axis=0, ascending=False) Out[5]: age name sequence
|
(1-3) 열 이름을 (알파벳 순서로) 정렬하기 : axis=1
# sorting columns of DataFrame : axis=1 In [6]: personnel_df.sort(axis=1) Out[6]: age name sequence
# sorting columns of DataFrame in descending order : axis=1, ascending=False In [7]: personnel_df.sort(axis=1, ascending=False) Out[7]: sequence name age
|
(1-4) DataFrame 자체 내에서 정렬된 상태로 다시 저장하기 : inplace=True
In [8]: personnel_df Out[8]: age name sequence 0 30 park 1 1 20 lee 3 2 40 choi 2
In [9]: personnel_df.sort_values(by=['sequence'], axis=0, inplace=True) In [10]: personnel_df Out[10]: age name sequence 0 30 park 1 2 40 choi 2 1 20 lee 3
|
(1-5) 결측값을 처음에(na_position='first'), 혹은 마지막(na_position='last') 위치에 정렬하기
# putting NaN to DataFrame In [11]: import numpy as np In [12]: personnel_df = pd.DataFrame({'sequence': [1, 3, np.nan], ...: 'name': ['park', 'lee', 'choi'], ...: 'age': [30, 20, 40]}) ...: In [13]: personnel_df Out[13]: age name sequence
In [14]: personnel_df.sort_values(by=['sequence'], axis=0, na_position='first') Out[14]: age name sequence
In [15]: personnel_df.sort_values(by=['sequence'], axis=0, na_position='last') Out[15]: age name sequence
|
(2) Tuple 정렬하기 : sorted(tuple, key) method |
# making a tuple In [16]: personnel_tuple = [(1, 'park', 30), ...: (3, 'lee', 20), ...: (2, 'choi', 40)] In [17]: personnel_tuple Out[17]: [(1, 'park', 30), (3, 'lee', 20), (2, 'choi', 40)]
# sort by sequence number In [18]: sorted(personnel_tuple, key=lambda personnel: personnel[0]) Out[18]: [(1, 'park', 30), (2, 'choi', 40), (3, 'lee', 20)]
In [19]: sorted(personnel_tuple, key=lambda personnel: personnel[1]) Out[19]: [(2, 'choi', 40), (3, 'lee', 20), (1, 'park', 30)]
# sort by age In [20]: sorted(personnel_tuple, key=lambda personnel: personnel[2]) Out[20]: [(3, 'lee', 20), (1, 'park', 30), (2, 'choi', 40)]
|
내림차순(descending order)으로 정렬하고 싶으면 'reverse=True' 옵션을 설정해주면 됩니다.
# sorting tuple in descending order by age : reverse=True In [21]: sorted(personnel_tuple, reverse=True, key=lambda personnel: personnel[2]) Out[21]: [(2, 'choi', 40), (1, 'park', 30), (3, 'lee', 20)]
|
(3) List 정렬하기 : sorted(list), or list.sort() |
# making a list In [23]: my_list = [0, 1, 2, 3, 4, 9, 8, 7, 6, 5]
In [24]: sorted(my_list) Out[24]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# (2) sorting a list : list.sort() method In [25]: my_list.sort() In [26]: my_list Out[26]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
In [27]: sorted(my_list, reverse=True) Out[27]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0] In [28]: my_list.sort(reverse=True) In [29]: my_list Out[29]: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
|
- Numpy 배열 정렬 np.sort() 는 http://rfriend.tistory.com/357 를 참고하시기 바랍니다.
- 사전 자료형(Dictionary)의 키, 값 기준 정렬 방법은 https://rfriend.tistory.com/473 를 참고하세요.
많은 도움 되었기를 바랍니다.
'Python 분석과 프로그래밍 > Python 데이터 전처리' 카테고리의 다른 글
[Python NumPy] 다차원 배열 ndarray 만들기 (0) | 2017.01.14 |
---|---|
[Python pandas] Series, DataFrame 행, 열 생성(creation), 선택(selection, slicing, indexing), 삭제(drop, delete) (0) | 2017.01.03 |
[Python] 데이터 재구조화(reshape) : pd.crosstab() 사용해 교차표(cross tabulation) (0) | 2016.12.30 |
[Python] 데이터 재구조화(reshape) : pd.wide_to_long() (0) | 2016.12.30 |
[Python] 데이터 재구조화(reshape) : pd.melt() (0) | 2016.12.28 |