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

파이썬으로 10행 2열 랜덤 모음 데이터프레임 생성 후 일치하는 행의 인덱스와 개수 출력하기

문제 개요

모음(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 함수를 조합하면 복잡한 반복문 없이도 두 열 간의 일치 여부를 간결하게 확인할 수 있습니다.