Pandas 데이터 정렬

PandasBeginner
지금 연습하기

소개

Pandas 정렬 데이터 실습에 오신 것을 환영합니다! 정렬은 데이터 분석의 기본적인 작업입니다. 데이터를 정리하여 읽고, 이해하고, 분석하기 쉽게 만들어 줍니다. 최고값 또는 최저값을 찾거나 단순히 데이터를 논리적인 순서로 배열해야 할 때, Pandas 는 작업을 완료할 수 있는 강력하고 유연한 도구를 제공합니다.

이 실습에서는 Pandas 의 주요 정렬 방법을 배우게 됩니다.

  • sort_values(): 하나 이상의 열 값을 기준으로 DataFrame 을 정렬합니다.
  • sort_index(): 인덱스를 기준으로 DataFrame 을 정렬합니다.
  • reset_index(): 정렬 작업 후 인덱스를 재설정합니다.

이 실습이 끝나면 분석 요구에 맞게 데이터를 배열하는 데 능숙해질 것입니다. 시작해 봅시다!

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 95%입니다.학습자들로부터 100%의 긍정적인 리뷰율을 받았습니다.

sort_values 를 사용하여 단일 열로 DataFrame 정렬

이 단계에서는 가장 일반적인 정렬 작업, 즉 단일 열의 값을 기준으로 DataFrame 을 정렬하는 방법을 배웁니다. 이를 위해 sort_values() 메서드를 사용합니다. by 매개변수는 정렬하려는 열을 지정하는 데 사용됩니다.

먼저 왼쪽에 있는 파일 탐색기를 사용하여 ~/project 디렉토리에 있는 main.py 파일을 엽니다. 이 파일에는 샘플 DataFrame 이 미리 채워져 있습니다.

이제 Age 열을 기준으로 DataFrame 을 정렬하기 위해 다음 코드를 main.py 끝에 추가합니다.

## --- Step 1: Sort by a single column ---
df_sorted_by_age = df.sort_values(by='Age')
print("\nDataFrame sorted by Age:")
print(df_sorted_by_age)

이제 전체 main.py 파일은 다음과 같이 보일 것입니다.

import pandas as pd

## Create a sample DataFrame for our exercises
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, 22, 25, 28, 22],
    'Score': [85, 91, 88, 79, 91]
}
df = pd.DataFrame(data)

print("Original DataFrame:")
print(df)

## --- Step 1: Sort by a single column ---
df_sorted_by_age = df.sort_values(by='Age')
print("\nDataFrame sorted by Age:")
print(df_sorted_by_age)

결과를 보려면 터미널에서 스크립트를 실행합니다.

python3 main.py

원본 DataFrame 과 그 뒤에 나이순으로 오름차순 정렬된 새 DataFrame 이 표시됩니다.

예상 출력:

Original DataFrame:
      Name  Age  Score
0    Alice   25     85
1      Bob   22     91
2  Charlie   25     88
3    David   28     79
4      Eve   22     91

DataFrame sorted by Age:
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
0    Alice   25     85
2  Charlie   25     88
3    David   28     79

여러 열을 오름차순으로 정렬

이 단계에서는 여러 열을 기준으로 DataFrame 을 정렬하는 방법을 배웁니다. 이는 첫 번째 정렬 열에 동점 (tie) 이 있을 때 두 번째 정렬 기준을 적용하려는 경우에 유용합니다.

여러 열을 기준으로 정렬하려면 sort_values() 메서드의 by 매개변수에 열 이름 목록을 전달합니다. Pandas 는 목록의 첫 번째 열을 기준으로 정렬하고, 그 다음 두 번째 열을 사용하여 동점을 해결하는 식으로 작동합니다.

DataFrame 을 먼저 Age를 기준으로, 그 다음 Score를 기준으로 정렬해 보겠습니다. 다음 코드를 main.py 파일 끝에 추가합니다.

## --- Step 2: Sort by multiple columns ---
df_sorted_multiple = df.sort_values(by=['Age', 'Score'])
print("\nDataFrame sorted by Age and then Score:")
print(df_sorted_multiple)

이제 스크립트를 다시 실행하여 변경 사항을 확인합니다.

python3 main.py

출력에 새로운 섹션이 표시됩니다. Age가 22 인 두 행이 이제 Score를 기준으로 정렬된 것을 확인합니다 (점수가 91 인 Eve 뒤에 점수가 91 인 Bob 이 오는 것은 안정적인 순서이기 때문입니다). Age가 25 인 행에도 동일하게 적용됩니다.

예상 출력 (새로운 부분만 표시):

...

DataFrame sorted by Age and then Score:
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
0    Alice   25     85
2  Charlie   25     88
3    David   28     79

ascending=False 를 사용하여 내림차순으로 정렬

이 단계에서는 정렬 방향을 제어하는 방법을 배웁니다. 기본적으로 sort_values()는 오름차순으로 정렬합니다. ascending 매개변수를 사용하여 이를 변경할 수 있습니다.

  • 내림차순으로 정렬하려면 ascending=False로 설정합니다.
  • 여러 열을 기준으로 정렬할 때, 불리언 (boolean) 목록을 전달하여 각 열에 대해 다른 순서를 지정할 수 있습니다. 예: ascending=[True, False].

DataFrame 을 Age를 기준으로 오름차순으로, Score를 기준으로 내림차순으로 정렬해 보겠습니다. 이를 통해 각 연령 그룹 내에서 가장 높은 점수를 받은 사람을 찾을 수 있습니다. 다음 코드를 main.py 파일 끝에 추가합니다.

## --- Step 3: Sort in descending and mixed order ---
df_sorted_mixed = df.sort_values(by=['Age', 'Score'], ascending=[True, False])
print("\nDataFrame sorted by Age (asc) and Score (desc):")
print(df_sorted_mixed)

스크립트를 실행하여 결과를 관찰합니다.

python3 main.py

출력에서 나이 22 세에 해당하는 행을 살펴봅니다. Eve 와 Bob 모두 점수가 91 점이므로 순서가 변경되지 않을 수 있습니다. 나이 25 세의 경우, 점수를 내림차순으로 정렬했기 때문에 Charlie (Score 88) 가 Alice (Score 85) 보다 먼저 나타납니다.

예상 출력 (새로운 부분만 표시):

...

DataFrame sorted by Age (asc) and Score (desc):
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
2  Charlie   25     88
0    Alice   25     85
3    David   28     79

sort_index 를 사용하여 인덱스 정렬

이 단계에서는 DataFrame 을 인덱스별로 정렬하는 방법을 배웁니다. sort_values() 작업을 수행한 후에는 DataFrame 의 인덱스가 뒤섞입니다. 이전 출력에서 이를 확인할 수 있습니다 (예: 인덱스는 1, 4, 2, 0, 3입니다).

sort_index() 메서드를 사용하면 인덱스 레이블을 기준으로 DataFrame 을 정렬할 수 있으며, 인덱스가 단순한 범위였다면 원래 순서를 복원합니다.

이전 단계의 결과 (df_sorted_mixed) 를 가져와 인덱스별로 정렬해 보겠습니다. 다음 코드를 main.py 파일 끝에 추가합니다.

## --- Step 4: Sort by index ---
## The previous result (df_sorted_mixed) has a jumbled index. Let's sort it by index.
df_reordered_by_index = df_sorted_mixed.sort_index()
print("\nDataFrame re-sorted by index:")
print(df_reordered_by_index)

스크립트를 실행합니다.

python3 main.py

DataFrame 이 이제 인덱스 (0, 1, 2, 3, 4) 별로 정렬되어 원래 행 순서가 효과적으로 복원되었음을 확인할 수 있습니다.

예상 출력 (새로운 부분만 표시):

...

DataFrame re-sorted by index:
      Name  Age  Score
0    Alice   25     85
1      Bob   22     91
2  Charlie   25     88
3    David   28     79
4      Eve   22     91

reset_index 를 사용하여 정렬 후 인덱스 재설정

이 마지막 단계에서는 DataFrame 의 인덱스를 재설정하는 방법을 배웁니다. 정렬 후에는 인덱스가 더 이상 0 부터 시작하는 깔끔한 순차 범위가 아닙니다. sort_index()를 사용하여 원래 순서를 복원할 수 있지만, 때로는 새로운 정렬 순서를 유지하면서 새롭고 순차적인 인덱스를 갖기를 원할 수 있습니다.

reset_index() 메서드가 이 목적에 완벽합니다. 현재 인덱스를 기본 정수 인덱스 (0, 1, 2, ...) 로 바꿉니다. drop=True 매개변수를 사용하여 이전 인덱스를 완전히 삭제하는 것이 일반적입니다. drop=True를 사용하지 않으면 이전 인덱스가 index라는 새 열로 추가됩니다.

정렬된 DataFrame 중 하나 (df_sorted_mixed) 를 가져와 인덱스를 재설정해 보겠습니다. 마지막 코드를 main.py에 추가합니다.

## --- Step 5: Reset index after sorting ---
## Let's take a sorted DataFrame and give it a new, clean index
df_with_reset_index = df_sorted_mixed.reset_index(drop=True)
print("\nSorted DataFrame with reset index:")
print(df_with_reset_index)

스크립트를 마지막으로 실행합니다.

python3 main.py

최종 출력을 관찰합니다. DataFrame 은 여전히 Age(오름차순) 및 Score(내림차순) 로 정렬되어 있지만, 인덱스는 이제 0 부터 4 까지의 깔끔한 순차열입니다.

예상 출력 (새로운 부분만 표시):

...

Sorted DataFrame with reset index:
      Name  Age  Score
0      Bob   22     91
1      Eve   22     91
2  Charlie   25     88
3    Alice   25     85
4    David   28     79

요약

Pandas 정렬 데이터 랩을 완료하신 것을 축하드립니다! Pandas DataFrame 내에서 데이터를 구성하고 정렬하는 필수 기술을 익히셨습니다.

이 랩에서는 다음을 연습했습니다.

  • sort_values(by='column_name')을 사용하여 단일 열로 정렬하기.
  • by 매개변수에 리스트를 전달하여 여러 열로 정렬하기.
  • ascending 매개변수를 사용하여 정렬 방향 제어하기.
  • sort_index()를 사용하여 인덱스를 정렬하여 원래 순서 복원하기.
  • reset_index(drop=True)를 사용하여 정렬된 DataFrame 에 새롭고 깔끔한 인덱스 생성하기.

이러한 정렬 기법은 데이터 정리, 탐색 및 고급 분석 및 시각화를 위한 준비에 필수적입니다. 이러한 기술을 계속 연습하여 데이터 과학 여정에서 더욱 효율적이 되십시오.