문제 개요
모음(a, e, i, o, u)으로 구성된 10행 2열의 랜덤 데이터프레임을 생성하고, 두 열(col1, col2)의 값이 서로 일치하는 행을 찾아 해당 인덱스와 일치 개수를 출력하는 프로그램을 작성해 보겠습니다.
다음과 같은 데이터프레임이 있다고 가정해 보겠습니다.
col1 col2 0 o e 1 e e 2 i u 3 e o 4 i i 5 u o 6 e a 7 u o 8 a u 9 e a
두 열의 값이 일치하는 행의 인덱스와 개수를 출력하면 결과는 다음과 같습니다.
index is col1 col2 1 e e 4 i i count is 2
해결 방법
이 문제는 아래 세 단계를 따라 해결할 수 있습니다.
데이터프레임 정의 – numpy의
np.random.choice()를 활용해 모음 리스트에서 무작위 값을 추출하여 10행 2열의 데이터프레임을 생성합니다.일치하는 행 비교 –
df.col1 == df.col2조건과np.where()를 결합해 두 열의 값이 같은 행만 필터링합니다.일치 개수 계산 –
len()함수로 일치하는 행의 총 개수를 구합니다.
두 열을 비교하는 핵심 코드는 다음과 같습니다.
df.iloc[np.where(df.col1 == df.col2)]
일치하는 행의 개수를 구하는 코드는 다음과 같습니다.
len(df.iloc[np.where(df.col1 == df.col2)])
전체 예제 코드
아래 전체 구현 예제를 살펴보면 이해가 더 쉽습니다.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'col1': np.random.choice(['a', 'e', 'i', 'o', 'u'], 10),
'col2': np.random.choice(['a', 'e', 'i', 'o', 'u'], 10)
})
print("DataFrame is \n", df)
print("index is \n", df.iloc[np.where(df.col1 == df.col2)])
print("count is \n", len(df.iloc[np.where(df.col1 == df.col2)]))
실행 결과
col1 col2 0 o e 1 e e 2 i u 3 e o 4 i i 5 u o 6 e a 7 u o 8 a u 9 e a index is col1 col2 1 e e 4 i i count is 2
핵심 함수 설명
np.random.choice(list, n) – 지정한 리스트에서 n개의 값을 무작위로 선택합니다. 여기서는 모음 5개 중 10개를 추출해 각 열을 구성합니다.
np.where(condition) – 조건식이 참(True)인 위치의 인덱스 배열을 반환합니다.
df.col1 == df.col2는 요소별로 두 열의 값을 비교합니다.df.iloc[] – 정수 위치 기반 인덱싱으로, np.where가 반환한 인덱스에 해당하는 행만 추출합니다.
이처럼 pandas의 불리언 비교와 numpy의 where 함수를 조합하면 복잡한 반복문 없이도 두 열 간의 일치 여부를 간결하게 확인할 수 있습니다.