데이터 분석 작업 중에는 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)를 함께 사용하면 됩니다.