Py) 기초 - Pandas(정렬)

Py) 기초 - Pandas(정렬)

파이썬 기반 데이터분석을 위하여 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
## 3 100
## 2 300
## 0 200
## 1 400
## dtype: int64

먼저 인덱스 기준으로 정렬을 해본다. “ascending” 인자의 기본값은 True로 되어있어 별도로 값을 지정하지 않는 경우 오름차순으로 대상을 정렬한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
ser.sort_index()
## 0 200
## 1 400
## 2 300
## 3 100
## dtype: int64

ser.sort_index(ascending = False)
## 3 100
## 2 300
## 1 400
## 0 200
## dtype: int64

이번에는 값을 기준으로 정렬을 해본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
ser.sort_values()
## 3 100
## 0 200
## 2 300
## 1 400
## dtype: int64

ser.sort_values(ascending = False)
## 1 400
## 2 300
## 0 200
## 3 100
## dtype: int64

데이터프레임(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

시리즈 객체와 마찬가지로 인덱스 기준 정렬을 해보자.

1
df.sort_index()
지점 상품 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

변수 기준 정렬은 다음과 같다.

1
df.sort_values("Q1")
지점 상품 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
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×