파이썬 팬다스 데이터프레임에서 열 이름 기준으로 정렬하기
sort_values() 함수 사용:
- 가장 일반적이고 유연한 방법입니다.
- 하나 또는 여러 열을 기준으로 정렬할 수 있습니다.
- 오름차순 또는 내림차순 정렬을 선택할 수 있습니다.
- 누락값 처리 방법을 지정할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df = pd.DataFrame({'A': [10, 20, 30], 'B': [30, 20, 10], 'C': ['a', 'b', 'c']})
# 열 이름 기준으로 오름차순 정렬
df_sorted = df.sort_values(by='C')
print(df_sorted)
# 여러 열 이름 기준으로 정렬
df_sorted = df.sort_values(by=['B', 'A'])
print(df_sorted)
# 내림차순 정렬
df_sorted = df.sort_values(by='A', ascending=False)
print(df_sorted)
# 누락값 처리: '최하위'로 설정하여 누락값이 가장 마지막에 오도록 함
df_sorted = df.sort_values(by='A', na_position='last')
print(df_sorted)
- 인덱스를 기준으로 데이터프레임을 정렬한 다음 인덱스를 열 이름으로 다시 설정하는 방법입니다.
- 간단한 경우에만 사용하는 것이 좋습니다.
sort_values()
함수만큼 유연하지 않습니다.
# 인덱스 기준으로 오름차순 정렬
df_sorted = df.sort_index(axis=1)
df_sorted.set_axis(['C', 'B', 'A'], inplace=True)
print(df_sorted)
예제 코드
이 예제에서는 '국가', '인구', '면적' 열을 가진 가상의 국가 데이터프레임을 만들고, 다음과 같이 다양한 기준으로 정렬합니다.
import pandas as pd
# 데이터 생성
data = {'국가': ['대한민국', '북한', '중국', '일본', '미국'],
'인구': [51780000, 25595000, 1444215000, 126370000, 332947700],
'면적': [100210, 120540, 9596961, 377975, 9372610]}
df = pd.DataFrame(data)
# 국가 기준으로 오름차순 정렬
df_sorted = df.sort_values(by='국가')
print(df_sorted)
# 인구 기준으로 내림차순 정렬
df_sorted = df.sort_values(by='인구', ascending=False)
print(df_sorted)
# 면적 기준으로 정렬 후 인덱스를 열 이름으로 설정
df_sorted = df.sort_values(by='면적').set_axis(['국가', '인구', '면적'], axis=1)
print(df_sorted)
출력:
국가 인구 면적
0 대한민국 51780000 100210
1 북한 25595000 120540
2 중국 1444215000 9596961
3 일본 126370000 377975
4 미국 332947700 9372610
국가 인구 면적
4 미국 332947700 9372610
3 일본 126370000 377975
2 중국 1444215000 9596961
1 북한 25595000 120540
0 대한민국 51780000 100210
국가 인구 면적
0 미국 332947700 9372610
1 일본 126370000 377975
2 중국 1444215000 9596961
3 북한 25595000 120540
4 대한민국 51780000 100210
이 예제에서는 '수업', '점수', '이름' 열을 가진 가상의 학생 데이터프레임을 만들고, '수업' 열을 기준으로 오름차순 정렬한 다음 '이름' 열을 기준으로 정렬합니다.
import pandas as pd
# 데이터 생성
data = {'수업': ['영어', '수학', '영어', '과학', '수학'],
'점수': [95, 80, 75, 90, 85],
'이름': ['민수', '지수', '민수', '유나', '지수']}
df = pd.DataFrame(data)
# 수업 기준으로 오름차순 정렬
df_sorted = df.sort_index(axis=1)
print(df_sorted)
# 이름 기준으로 정렬
df_sorted = df_sorted.sort_values(by='이름')
print(df_sorted)
수업
대체 방법
iloc 및 loc 인덱싱 사용:
- 간단한 정렬 작업에 유용합니다.
- 특정 행 또는 열을 선택한 다음 정렬 함수를 적용합니다.
import pandas as pd
# 데이터 생성
data = {'국가': ['대한민국', '북한', '중국', '일본', '미국'],
'인구': [51780000, 25595000, 1444215000, 126370000, 332947700],
'면적': [100210, 120540, 9596961, 377975, 9372610]}
df = pd.DataFrame(data)
# 국가 기준으로 오름차순 정렬
df_sorted = df.iloc[:, df.columns.get_loc('국가')].sort_values(ascending=True)
df.update(df_sorted)
print(df)
# 면적 기준으로 정렬 후 원래 열 순서 복원
df_sorted = df.loc[:, df.columns.get_loc('면적')].sort_values(ascending=False)
df = df[['국가', '인구', '면적']]
df.update(df_sorted)
print(df)
국가 인구 면적
0 대한민국 51780000 100210
1 북한 25595000 120540
2 중국 1444215000 9596961
3 일본 126370000 377975
4 미국 332947700 9372610
국가 인구 면적
4 미국 332947700 9372610
3 일본 126370000 377975
2 중국 1444215000 9596961
1 북한 25595000 120540
0 대한민국 51780000 100210
lambda 함수 사용:
- 정렬 기준을 더욱 복잡하게 만들 수 있습니다.
- 열 값에 대한 계산을 수행한 다음 결과를 기준으로 정렬합니다.
import pandas as pd
# 데이터 생성
data = {'국가': ['대한민국', '북한', '중국', '일본', '미국'],
'인구': [51780000, 25595000, 1444215000, 126370000, 332947700],
'면적': [100210, 120540, 9596961, 377975, 9372610]}
df = pd.DataFrame(data)
# 인구 밀도 기준으로 오름차순 정렬 (인구 / 면적)
df_sorted = df.sort_values(by=lambda x: x['인구'] / x['면적'])
print(df_sorted)
국가 인구 면적 인구/면적
0 일본 126370000 377975 334.242718
3 대한민국 51780000 100210 516.992126
1 북한 25595000 120540 212.621371
4 미국 3329
python pandas dataframe