Back-End/Pandas
sort
pshoon25
2022. 12. 16. 16:30
모든 프로그램 언어에서 정렬은 두 가지 종류가 있다.
그것은 '오름차순'과 '내림차순'이다.
모든 프로그램 언어의 기본은 '오름차순'으로 설정되어 있다.
😤판다스의 데이터프레임에서도 정렬을 할 수 있는 함수가 두 가지 있다.
- 데이터 프레임의 Series의 정렬을 도와주는 함수
- df.sort_values( )함수
- 데이터 프레임의 컬럼 명(Column Label) 또는 열의 인덱스(Index)의 정렬을 도와주는 함수
- df.sort_index( )함수
순차적으로 하나씩 알아보자 !
데이터 프레임(Data Frame)에서 시리즈(Series)의 정렬을 위해서는 sort_values( )함수를 이용한다.
위 함수는 SQL의 order by와 유사하다.
Sort_values( ) 함수의 주요 파라미터는 아래와 같다.
- by = '컬럼명'
- 특정 컬럼명을 입력하면 해당 컬럼으로 정렬을 수행한다.
- ascending=True | False
- True 일 경우 오름차순으로 정렬 (Default)
- False 일 경우 내림차순으로 정렬
- na_position='first'|'last'
- 'first'일 경우, Null값이 맨 위로 정렬
- 'last'일 경우, Null값이 맨 하단으로 정렬
👉df.sort_values( )
import numpy as np
import pandas as pd
df = pd.DataFrame({"c1":[14, 5, 6, np.nan, 32],
"c2":['a', 'c', 'e', 'z', 'e'],
"c3":[np.nan, 25, 26, 3, 6],
"c4":[4, 5, 6, 34, 5]}, index=list('ABCDE'))
print(df)
'''
c1 c2 c3 c4
A 14.0 a NaN 4
B 5.0 c 25.0 5
C 6.0 e 26.0 6
D NaN z 3.0 34
E 32.0 e 6.0 5
'''
new_df = df.sort_values(by=['c1']) # c1 컬럼으로 오름차순 정렬
print(new_df)
'''
c1 c2 c3 c4
B 5.0 c 25.0 5
C 6.0 e 26.0 6
A 14.0 a NaN 4
E 32.0 e 6.0 5
D NaN z 3.0 34
'''
new_df = df.sort_values(by=['c1'], ascending=False) # c1 컬럼으로 내림차순 정렬
print(new_df)
'''
c1 c2 c3 c4
E 32.0 e 6.0 5
A 14.0 a NaN 4
C 6.0 e 26.0 6
B 5.0 c 25.0 5
D NaN z 3.0 34
'''
new_df = df.sort_values(by=['c2']) # c2 값을 오름차순으로 정렬
print(new_df)
'''
c1 c2 c3 c4
A 14.0 a NaN 4
B 5.0 c 25.0 5
C 6.0 e 26.0 6
E 32.0 e 6.0 5
D NaN z 3.0 34
'''
new_df = df.sort_values(by=['c1'], ascending=False, na_position='first') # c1 컬럼으로 내림차순 정렬, null 값 맨 앞으로 배치
print(new_df)
'''
c1 c2 c3 c4
D NaN z 3.0 34
E 32.0 e 6.0 5
A 14.0 a NaN 4
C 6.0 e 26.0 6
B 5.0 c 25.0 5
'''
new_df = df.sort_values(by=['c2', 'c1'], ascending=False) # 다중정렬 c2 값을 우선 정렬, 그 후 c2에서 동일한 값은 c1값에서 내림차순으로 정렬
print(new_df)
'''
c1 c2 c3 c4
D NaN z 3.0 34
E 32.0 e 6.0 5
C 6.0 e 26.0 6
B 5.0 c 25.0 5
A 14.0 a NaN 4
데이터 프레임의 컬럼 명(Column Label) 또는 열의 인덱스(Index)의 정렬을 도와주는 함수는 df.sort_index( )함수이다.
df.sort_index( ) 함수는 파라미터의 axis=0|1 을 지정하여 '인덱스'와 '컬럼명'의 정렬을 지정할 수 있다.
- axis=0일 경우,
- 행(Colums)의 인덱스를 정렬해준다. (B, C, D, A, E)를 정렬
- axis=1일 경우,
- 열의 레이블을 정렬해준다. 즉 컬럼명인 (c1, d2, c2, d1) 을 정렬
👉df.sort_index( )
import numpy as np
import pandas as pd
df = pd.DataFrame({"c1":[14,5,6,np.nan,32],
"d2":[14,15,16,5,np.nan],
"c2":[np.nan,25,26,3,6],
"d1":[4,5,6,34,5]}, index=list('BCDAE'))
print(df)
'''
c1 d2 c2 d1
B 14.0 14.0 NaN 4
C 5.0 15.0 25.0 5
D 6.0 16.0 26.0 6
A NaN 5.0 3.0 34
E 32.0 NaN 6.0 5
'''
# 행의 인덱스(레이블) 정렬
### 오름차순
new_df = df.sort_index(axis = 0)
print(new_df)
'''
c1 d2 c2 d1
A NaN 5.0 3.0 34
B 14.0 14.0 NaN 4
C 5.0 15.0 25.0 5
D 6.0 16.0 26.0 6
E 32.0 NaN 6.0 5
'''
### 내림차순
new_df = df.sort_index(axis = 0, ascending=False)
print(new_df)
'''
c1 d2 c2 d1
E 32.0 NaN 6.0 5
D 6.0 16.0 26.0 6
C 5.0 15.0 25.0 5
B 14.0 14.0 NaN 4
A NaN 5.0 3.0 34
'''
## 나. 열의 인덱스(레이블) 정렬
### 오름차순
new_df = df.sort_index(axis = 1)
print(new_df)
'''
c1 c2 d1 d2
B 14.0 NaN 4 14.0
C 5.0 25.0 5 15.0
D 6.0 26.0 6 16.0
A NaN 3.0 34 5.0
E 32.0 6.0 5 NaN
'''
### 내림차순
new_df = df.sort_index(axis = 1, ascending=False)
print(new_df)
'''
d2 d1 c2 c1
B 14.0 4 NaN 14.0
C 15.0 5 25.0 5.0
D 16.0 6 26.0 6.0
A 5.0 34 3.0 NaN
E NaN 5 6.0 32.0
'''