Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 Pandas 데이터프레임에서 마지막 두 행 교환하기

데이터 분석 작업 중에는 pandas 데이터프레임의 행 순서를 변경해야 하는 경우가 종종 발생합니다. 이 글에서는 iloc 위치 기반 인덱싱을 활용해 데이터프레임의 마지막 두 행을 서로 맞바꾸는 간단하고 효율적인 방법을 알아보겠습니다.

예를 들어 아래와 같은 학생 성적 데이터프레임이 있을 때, 마지막 두 행(Alex와 Serina)의 위치를 서로 교환해 보겠습니다.

교환 전
   Name    Age  Maths  Science  English
0  David   13     98       75       79
1  Adam    12     59       96       45
2  Bob     12     66       55       70
3  Alex    13     95       49       60
4  Serina  12     70       78       80
교환 후
    Name   Age  Maths  Science  English
0  David   13     98       75       79
1  Adam    12     59       96       45
2  Bob     12     66       55       70
3  Serina  12     70       78       80
4  Alex    13     95       49       60

해결 방법

이 문제는 임시 변수 하나만 있으면 몇 줄의 코드로 해결할 수 있습니다. 단계별 접근 방법은 다음과 같습니다.

  • 데이터프레임 정의: 먼저 예제에 사용할 데이터프레임을 생성합니다.

  • 마지막 행 임시 저장: temp 변수에 마지막 행의 데이터를 미리 저장해 둡니다.

temp = df.iloc[-1]
  • 행 교환 수행: 마지막 행에 뒤에서 두 번째 행의 값을 덮어쓴 뒤, 임시 저장해 둔 데이터를 뒤에서 두 번째 행에 다시 대입합니다.

df.iloc[-1] = df.iloc[-2]
df.iloc[-2] = temp

df.iloc[-1]은 마지막 행을, df.iloc[-2]는 뒤에서 두 번째 행을 의미합니다. 음수 인덱싱을 사용하기 때문에 행 개수와 관계없이 항상 마지막 두 행을 정확하게 가리킬 수 있다는 것이 이 방법의 큰 장점입니다.

전체 코드 예제

아래 전체 코드를 실행하면 실제 동작 과정을 그대로 확인할 수 있습니다.

import pandas as pd
data = {'Name': ['David', 'Adam', 'Bob', 'Alex', 'Serina'],
        'Age': [13, 12, 12, 13, 12],
        'Maths': [98, 59, 66, 95, 70],
        'Science': [75, 96, 55, 49, 78],
        'English': [79, 45, 70, 60, 80]}
df = pd.DataFrame(data)
print("교환 전\n", df)
temp = df.iloc[-1]
df.iloc[-1] = df.iloc[-2]
df.iloc[-2] = temp
print("교환 후\n", df)

실행 결과

교환 전
   Name    Age  Maths  Science  English
0  David   13     98       75       79
1  Adam    12     59       96       45
2  Bob     12     66       55       70
3  Alex    13     95       49       60
4  Serina  12     70       78       80
교환 후
    Name   Age  Maths  Science  English
0  David   13     98       75       79
1  Adam    12     59       96       45
2  Bob     12     66       55       70
3  Serina  12     70       78       80
4  Alex    13     95       49       60

추가 팁

여러 행을 한 번에 재배열하고 싶다면 인덱스 리스트를 전달하는 방법도 유용합니다. 예를 들어 df.iloc[[0, 1, 2, 4, 3]]처럼 원하는 순서를 지정하면 해당 순서대로 행이 새롭게 배치됩니다. 또한 교환 후 인덱스를 0부터 다시 정렬하고 싶다면 df.reset_index(drop=True)를 함께 사용하면 됩니다.