파이썬 기반 데이터분석을 위하여 Pandas 라이브러리 객체 원소의 정렬 방법에 대해 알아보고자 한다.
개요 데이터를 다루다보면 값이 중구난방으로 뒤섞여있어 별도로 정렬이 필요할 때가 있다. 특히 큰 데이터를 다루다보면 모든 데이터를 살펴보기가 어렵기 때문에 오름차순 또는 내림차순으로 정렬해서 살펴보기도 한다. 이런 맥락적인 사유 말고도 Pandas 객체를 다룸에 있어 시계열 분석, 그래프 시각화 등 원하는 작업의 특수성 때문에 정렬이 필요한 경우도 있다.
실습 Pandas 객체의 정렬은 크게 인덱스 기준 정렬과 변수 기준 정렬이 있으며 해당 작업은 각각 .sort_index()
메서드와 .sort_values()
메서드로 실시한다. 각 정렬 대상이 되는 인덱스 또는 변수는 내림차순이나 오름차순을 “ascending” 인자로 지정할 수 있다.
시리즈(Series) 실습을 위해 시리즈 객체를 준비한다.
1 2 3 4 5 6 7 8 ser = pd.Series([100 , 300 , 200 , 400 ], index = [3 , 2 , 0 , 1 ]) ser
먼저 인덱스 기준으로 정렬을 해본다. “ascending” 인자의 기본값은 True
로 되어있어 별도로 값을 지정하지 않는 경우 오름차순으로 대상을 정렬한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 ser.sort_index() ser.sort_index(ascending = False )
이번에는 값을 기준으로 정렬을 해본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 ser.sort_values() ser.sort_values(ascending = False )
데이터프레임(DataFrame) 이번엔 데이터프레임 객체로 정렬을 해보자.
1 2 3 4 5 6 7 df = pd.DataFrame({"지점" : ["A" , "A" , "B" , "B" ], "상품" : ["P1" , "P2" , "P1" , "P2" ], "Q1" : [112 , 134 , 156 , 178 ], "Q2" : [212 , 234 , 256 , 278 ], "Q3" : [312 , 334 , 356 , 378 ], "Q4" : [412 , 434 , 456 , 478 ]}) df
지점
상품
Q1
Q2
Q3
Q4
0
A
P1
112
212
312
412
1
A
P2
134
234
334
434
2
B
P1
156
256
356
456
3
B
P2
178
278
378
478
시리즈 객체와 마찬가지로 인덱스 기준 정렬을 해보자.
지점
상품
Q1
Q2
Q3
Q4
0
A
P1
112
212
312
412
1
A
P2
134
234
334
434
2
B
P1
156
256
356
456
3
B
P2
178
278
378
478
내림차순정렬 결과는 다음과 같다.
1 df.sort_index(ascending = False )
지점
상품
Q1
Q2
Q3
Q4
3
B
P2
178
278
378
478
2
B
P1
156
256
356
456
1
A
P2
134
234
334
434
0
A
P1
112
212
312
412
다층 인덱스(multi level index)의 경우 각각의 인덱스에 대해 오름차순과 내림차순을 별도로 지정할 수 있으며 “ascending” 인자에 리스트 객체를 할당하면 된다.
1 df.set_index(["지점" , "상품" ]).sort_index(ascending = [False , True ])
Q1
Q2
Q3
Q4
지점
상품
B
P1
156
256
356
456
P2
178
278
378
478
A
P1
112
212
312
412
P2
134
234
334
434
변수 기준 정렬은 다음과 같다.
지점
상품
Q1
Q2
Q3
Q4
0
A
P1
112
212
312
412
1
A
P2
134
234
334
434
2
B
P1
156
256
356
456
3
B
P2
178
278
378
478
내림차순 정렬은 다음과 같이 가능하다.
1 df.sort_values("Q1" , ascending = False )
지점
상품
Q1
Q2
Q3
Q4
3
B
P2
178
278
378
478
2
B
P1
156
256
356
456
1
A
P2
134
234
334
434
0
A
P1
112
212
312
412
두 개 이상의 변수를 대상으로 정렬하는 경우 .sort_index()
메서드와 유사하다.
1 df.sort_values(["지점" , "상품" ], ascending = [False , False ])
지점
상품
Q1
Q2
Q3
Q4
3
B
P2
178
278
378
478
2
B
P1
156
256
356
456
1
A
P2
134
234
334
434
0
A
P1
112
212
312
412
<파이썬 데이터분석 기초 시리즈>01 - 원소 02 - 연산자 03 - 함수 04 - 객체(리스트) 05 - 객체(튜플) 06 - 객체(딕셔너리) 07 - 객체(세트) 08 - 객체(기타) 09 - 제어문(if) 10 - 제어문(for) 11 - 기본함수 12 - 라이브러리 13 - 경로 14 - NumPy 15 - Pandas 16 - Pandas(Series) 17 - Pandas(DataFrame) 18 - Pandas(객체 탐색) 19 - Pandas(원소/조합 세기) 20 - Pandas(파일 읽어오기) 21 - Pandas(파일 쓰기) 22 - Pandas(필터링) 23 - Pandas(수치연산) 24 - Pandas(신규 변수 생성) 25 - Pandas(시간 데이터) 26 - Pandas(문자 데이터) 27 - Pandas(결측값 처리) 28 - Pandas(정렬) 29 - Pandas(GroupBy) 30 - Pandas(Apply) 31 - Pandas(Crosstab) 32 - Pandas(Melt) 33 - Pandas(Pivoting) 34 - Pandas(Merge) 35 - Pandas(그래프)