정렬과 순위
1. 정렬
- 정렬은 기준, 즉 row index 순, column index 순 등 필요
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
df = DataFrame(np.random.randn(4,3),
columns=list('bde'),
index=['seoul', 'busan', 'daegu', 'incheon'])
format = lambda x: '%.2f' % x
df['e'].map(format)
seoul 0.35
busan 0.08
daegu 0.89
incheon -0.44
Name: e, dtype: object
s1 = df['e'].map(format)
s1
seoul 0.35
busan 0.08
daegu 0.89
incheon -0.44
Name: e, dtype: object
1) Row index 기준 정렬
- Series 객체 index 순으로 정렬
s1.sort_index()
busan 0.08
daegu 0.89
incheon -0.44
seoul 0.35
Name: e, dtype: object
df2 = DataFrame(np.arange(8).reshape(2,4),
index=['three', 'one'],
columns=['d', 'a', 'b', 'c'])
df2
d | a | b | c | |
---|---|---|---|---|
three | 0 | 1 | 2 | 3 |
one | 4 | 5 | 6 | 7 |
- DataFrame 객체 index 순으로 정렬
df2.sort_index()
d | a | b | c | |
---|---|---|---|---|
one | 4 | 5 | 6 | 7 |
three | 0 | 1 | 2 | 3 |
2) Column index 기준 정렬
- DataFrame 객체 column 순으로 정렬: axis 지정
df2.sort_index(axis=1)
a | b | c | d | |
---|---|---|---|---|
three | 1 | 2 | 3 | 0 |
one | 5 | 6 | 7 | 4 |
3) 내림차순 정렬
- 데이터는 기본적으로 오름차순으로 정렬됨
- 내림차순으로 정렬을 할 때는 ascending=False로 지정
df2.sort_index(axis=1, ascending=False)
d | c | b | a | |
---|---|---|---|---|
three | 0 | 3 | 2 | 1 |
one | 4 | 7 | 6 | 5 |
4) 객체를 값에 따라 정렬
- 객체를 값에 따라 정렬할 경우에는 sort_values 메서드를 이용, 기본적으로 오름차순으로 정렬됨
obj = Series([4, 7, -3, 1])
obj
0 4
1 7
2 -3
3 1
dtype: int64
obj.sort_values()
2 -3
3 1
0 4
1 7
dtype: int64
- NaN은 정렬 시 가장 마지막에 위치
obj2 = Series([4, np.nan, 8, np.nan, -10, 2])
obj2
0 4.0
1 NaN
2 8.0
3 NaN
4 -10.0
5 2.0
dtype: float64
obj2.sort_values()
4 -10.0
5 2.0
0 4.0
2 8.0
1 NaN
3 NaN
dtype: float64
- Dictionary로 DataFrame 객체를 생성하면 column index 순으로 자동 정렬됨
frame = DataFrame({'b':[4,7,-5,2],
'a':[0,1,0,1]})
frame
a | b | |
---|---|---|
0 | 0 | 4 |
1 | 1 | 7 |
2 | 0 | -5 |
3 | 1 | 2 |
5) 특정 column을 지정하여 값에 따라 정렬
- sort_values 메서드에 by파라미터로 정렬하고자 하는 column 명을 지정
frame.sort_values(by='b')
a | b | |
---|---|---|
2 | 0 | -5 |
3 | 1 | 2 |
0 | 0 | 4 |
1 | 1 | 7 |
- 여러개의 column을 지정하여 기준에 따라 값을 순차적으로 정렬: 리스트 형태로 지정
frame.sort_values(by='a')
a | b | |
---|---|---|
0 | 0 | 4 |
2 | 0 | -5 |
1 | 1 | 7 |
3 | 1 | 2 |
frame.sort_values(by=['a', 'b'])
a | b | |
---|---|---|
2 | 0 | -5 |
0 | 0 | 4 |
3 | 1 | 2 |
1 | 1 | 7 |
2. 순위
- 순위를 정하는 메소드: rank()
- 기본적으로 값을 오름차순 순으로 순위를 매김
- 내림차순 순으로 순위를 매기려면 ascending=False이용
obj3 = Series([7, -2, 7, 4, 2, 0, 4])
obj3
0 7
1 -2
2 7
3 4
4 2
5 0
6 4
dtype: int64
obj3.sort_values()
1 -2
5 0
4 2
3 4
6 4
0 7
2 7
dtype: int64
1) (오름차순) 순위
- 값을 오름차순 순으로 정렬한 후 순위를 매긴 후 만약, 동일한 값이 있으면 각 순위를 더한 후 평균값으로 지정
obj3.rank()
0 6.5
1 1.0
2 6.5
3 4.5
4 3.0
5 2.0
6 4.5
dtype: float64
- method='first'는 데이터의 순서에 따라 순위를 매김, 동일값 데이터 평균값으로 표현하지 않음
obj3.rank(method='first')
0 6.0
1 1.0
2 7.0
3 4.0
4 3.0
5 2.0
6 5.0
dtype: float64
2) 내림차순 순위
obj3
0 7
1 -2
2 7
3 4
4 2
5 0
6 4
dtype: int64
obj3.sort_values(ascending=False)
2 7
0 7
6 4
3 4
4 2
5 0
1 -2
dtype: int64
obj3.rank(ascending=False)
0 1.5
1 7.0
2 1.5
3 3.5
4 5.0
5 6.0
6 3.5
dtype: float64
obj3.rank(ascending=False, method='first')
0 1.0
1 7.0
2 2.0
3 3.0
4 5.0
5 6.0
6 4.0
dtype: float64
3) 그룹지어서 순위를 매김
obj3
0 7
1 -2
2 7
3 4
4 2
5 0
6 4
dtype: int64
- 동일 데이터가 여러개 있을때 순위가 큰 것으로 사용
obj3.rank(ascending=False, method='max')
0 2.0
1 7.0
2 2.0
3 4.0
4 5.0
5 6.0
6 4.0
dtype: float64
- 동일 데이터가 여러개 있을때 순위가 작은 것으로 사용
obj3.rank(ascending=False, method='min')
0 1.0
1 7.0
2 1.0
3 3.0
4 5.0
5 6.0
6 3.0
dtype: float64
'AI&BigData > Basics' 카테고리의 다른 글
[Pandas] 기술통계 계산 2 (0) | 2018.06.03 |
---|---|
[Pandas] 기술통계 계산 1 (0) | 2018.06.03 |
Confusion matrix, accuracy, f1 score, precision, recall (0) | 2018.05.28 |
[Pandas] 함수 적용과 매핑 (0) | 2018.05.06 |
[Pandas] Operation (0) | 2018.05.06 |
[Pandas] Index 객체, reindex (0) | 2018.05.06 |
[Pandas] DataFrame (0) | 2018.04.30 |
[Pandas] Series 객체 (0) | 2018.04.29 |
[Numpy] 브로드캐스트. 기타활용 (0) | 2018.04.24 |