목차
Python Pandas 정렬(Sorting)
파이썬의 판다스를 이용해서 정렬을 하려고 합니다. 엑셀에서 정렬을 해보시면 아시겠지만 열을 하나만 선택하거나 두개를 선택해서 정렬하거나 다양한 방법들이 있습니다.
이번 포스트는 index 사용 정렬이 아닌 column 관련 정렬로 sort_values 함수를 사용해서 정렬할 것입니다.
아래 예제 실습을 통해 사용 방법을 익혀보겠습니다.
기본 Column 하나로 정렬하기
예제 코드>>
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name" : ["James", "James", "Kevin", "Adam", np.nan],
"math" : [90,50,50,30,100],
"physics" : [30,40,80,50,10],
"english" : [90,70,30,90,90]
})
print("Origial Dataframe")
print(df)
sorted_df = df.sort_values(by=["name"])
print("\nSorted Dataframe")
print(sorted_df)
4~9번 라인: Dataframe으로 배열(Matrix)값을 입력 합니다.
14번 라인: name 값을 기준으로 정렬(Sort) 합니다.
결과>>
Origial Dataframe
name math physics english
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
3 Adam 30 50 90
4 NaN 100 10 90
Sorted Dataframe
name math physics english
3 Adam 30 50 90
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
4 NaN 100 10 90
이름별로 정렬되었습니다. Index 번호도 같이 정렬에 맞춰 변경 되었습니다.
Column 두개로 순차적으로 정렬하기
Column값을 여러개를 사용해서 순차적으로 정렬하는 것이 가능 합니다.
예제 코드>>
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name" : ["James", "James", "Kevin", "Adam", np.nan],
"math" : [90,50,50,30,100],
"physics" : [30,40,80,50,10],
"english" : [90,70,30,90,90]
})
print("Origial Dataframe")
print(df)
sorted_df = df.sort_values(by=["name", "math"])
print("\nSorted Dataframe")
print(sorted_df)
14번 라인: 2개의 Column을 사용해서 정렬 합니다.
결과>>
Origial Dataframe
name math physics english
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
3 Adam 30 50 90
4 NaN 100 10 90
Sorted Dataframe
name math physics english
3 Adam 30 50 90
1 James 50 40 70
0 James 90 30 90
2 Kevin 50 80 30
4 NaN 100 10 90
동일 James 중에 math가 다시 순차적으로 정렬 하였습니다.
Index 값 제외하고 정렬하기
앞서 예제에서 볼 수 있듯이 정렬을 하면 index 값도 같이 바뀝니다. 이번에는 옵션 값을 넣어서 index는 섞이지 않게 하겠습니다.
예제 코드>>
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name" : ["James", "James", "Kevin", "Adam", np.nan],
"math" : [90,50,50,30,100],
"physics" : [30,40,80,50,10],
"english" : [90,70,30,90,90]
})
print("Origial Dataframe")
print(df)
sorted_df = df.sort_values(by=["name"], ignore_index=True)
print("\nSorted Dataframe")
print(sorted_df)
14번 라인: ignore_index 를 사용해서 index 정렬을 막습니다.
결과>>
Origial Dataframe
name math physics english
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
3 Adam 30 50 90
4 NaN 100 10 90
Sorted Dataframe
name math physics english
0 Adam 30 50 90
1 James 90 30 90
2 James 50 40 70
3 Kevin 50 80 30
4 NaN 100 10 90
내림 차순/오름 차순 정렬 하기
이번에는 정렬 방법을 바꾸도록 하겠습니다. ascending 값을 false 로 지정해서 내림차순으로 변경합니다. default는 오름 차순입니다.
예제 코드>>
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name" : ["James", "James", "Kevin", "Adam", np.nan],
"math" : [90,50,50,30,100],
"physics" : [30,40,80,50,10],
"english" : [90,70,30,90,90]
})
print("Origial Dataframe")
print(df)
sorted_df = df.sort_values(by=["name"], ascending=False)
print("\nSorted Dataframe")
print(sorted_df)
14번 라인: 오름/내림 설정
결과>>
Origial Dataframe
name math physics english
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
3 Adam 30 50 90
4 NaN 100 10 90
Sorted Dataframe
name math physics english
2 Kevin 50 80 30
0 James 90 30 90
1 James 50 40 70
3 Adam 30 50 90
4 NaN 100 10 90
빈값(numpy.nan)을 앞에 배치하여 정렬하기
예제 코드>>
import pandas as pd
import numpy as np
df = pd.DataFrame({
"name" : ["James", "James", "Kevin", "Adam", np.nan],
"math" : [90,50,50,30,100],
"physics" : [30,40,80,50,10],
"english" : [90,70,30,90,90]
})
print("Origial Dataframe")
print(df)
sorted_df = df.sort_values(by=["name"], na_position='first')
print("\nSorted Dataframe")
print(sorted_df)
14번 라인: na_position 옵션을 사용해서 빈값을 첫번째로 정렬되게 만듭니다.
결과>>
Origial Dataframe
name math physics english
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
3 Adam 30 50 90
4 NaN 100 10 90
Sorted Dataframe
name math physics english
4 NaN 100 10 90
3 Adam 30 50 90
0 James 90 30 90
1 James 50 40 70
2 Kevin 50 80 30
'파이썬(Python) > pandas' 카테고리의 다른 글
[Python]Pandas Dataframe 데이터 불러오기, loc, iloc 차이, 필터(Filter) 처리 (0) | 2022.02.26 |
---|---|
[Python] Pandas dataframe 중복 (동일)값 찾고 삭제하는 방법 (0) | 2022.02.25 |
[Python]Pandas에서 CSV 파일 읽기 에러 해결 (0) | 2022.02.23 |
[Python] Pandas 이동평균 함수 사용법 (Rolling) (2) | 2021.11.10 |
[Python] 코스피 1년 차트 그리기(Pandas, Matplotlib) (0) | 2021.10.30 |