데이터 분석 작업을 하다 보면 데이터프레임에서 특정 조건에 맞는 행을 무작위로 추출해야 하는 경우가 종종 있습니다. 이번 글에서는 pandas DataFrame에서 홀수 인덱스에 해당하는 행 중 하나를 무작위로 선택하는 파이썬 프로그램을 단계별로 살펴보겠습니다.
문제 정의
가령 다음과 같은 데이터프레임이 있다고 가정해 보겠습니다.
DataFrame is: id mark age 0 1 70 12 1 2 60 13 2 3 40 12 3 4 50 13 4 5 80 12 5 6 90 13 6 7 60 12
여기서 홀수 인덱스(1, 3, 5)에 해당하는 행 중 하나를 무작위로 선택하면 결과는 다음과 같습니다.
Random odd index row is: id 4 mark 50 age 13
해결 방법
이 문제는 아래 단계를 순서대로 따르면 해결할 수 있습니다.
데이터프레임 정의 — pandas를 사용해 샘플 데이터프레임을 생성합니다.
빈 리스트 생성 — 홀수 인덱스 값을 저장할 리스트를 준비합니다.
for 루프 작성 — 데이터프레임의 모든 인덱스에 접근하는 반복문을 만듭니다.
홀수 판별 조건 추가 — 인덱스를 2로 나눈 나머지가 1인 경우, 해당 인덱스를 리스트에 추가합니다.
무작위 값 추출 — random 모듈의 choice() 함수로 리스트에서 임의의 인덱스 하나를 선택합니다.
행 출력 — iloc을 사용해 해당 인덱스의 행을 최종적으로 출력합니다.
핵심 코드 설명
먼저 데이터프레임의 모든 인덱스 값에 접근하는 반복문입니다.
for i in df.index.values:
다음으로 인덱스가 홀수인지 확인하고, 홀수라면 리스트에 추가하는 조건문입니다.
if(i%2==1): l.append(i)
리스트에 모인 홀수 인덱스 중 하나를 무작위로 선택합니다.
random_index = rand.choice(l)
마지막으로 iloc을 사용해 선택된 위치 기반 인덱스에 해당하는 행을 출력합니다.
df.iloc[random_index]
전체 예제 코드
아래 전체 구현 예제를 통해 더 쉽게 이해할 수 있습니다.
import pandas as pd
import random as rand
df = pd.DataFrame({'id': [1,2,3,4,5,6,7],
'mark': [70,60,40,50,80,90,60],
'age':[12,13,12,13,12,13,12]
})
print("DataFrame is:\n",df)
l = []
for i in df.index.values:
if(i%2==1):
l.append(i)
random_index = rand.choice(l)
print("Random odd index row is: \n", df.iloc[random_index])
실행 결과
DataFrame is: id mark age 0 1 70 12 1 2 60 13 2 3 40 12 3 4 50 13 4 5 80 12 5 6 90 13 6 7 60 12 Random odd index row is: id 4 mark 50 age 13 Name: 3, dtype: int64
추가 팁
iloc은 위치 기반(position-based) 인덱싱을 수행하므로, 위 예제처럼 인덱스가 0부터 시작하는 정수일 때 특히 유용합니다. 만약 짝수 인덱스만 선택하고 싶다면 조건문을 i%2==0으로 변경하면 됩니다. 또한 실행할 때마다 결과가 달라질 수 있으며, 재현 가능한 결과가 필요하다면 rand.seed()로 시드 값을 고정하는 것도 좋은 방법입니다.