[Python] pandas를 이용한 DataFrame 차집합 구하기

2025. 1. 19. 01:20·개발 (Development)/Python

pandas를 이용한 DataFrame 차집합 구하기

두 DataFrame 간 특정 컬럼을 기준으로 데이터 차집합을 구하는 방법은 데이터를 정리하고 분석할 때 자주 사용됩니다. 예를 들어, 두 데이터셋의 공통 컬럼을 기준으로 df_a에는 존재하지만 df_b에는 없는 데이터를 필터링하고 싶을 때 pandas를 사용하여 쉽게 구현할 수 있습니다.

여기서는 physical_name이라는 컬럼을 기준으로 df_a - df_b의 차집합을 구하는 방법을 소개합니다.


예제 데이터 생성

import pandas as pd

# DataFrame 예시 생성
df_a = pd.DataFrame({
    'physical_name': ['a', 'b', 'c', 'd'],
    'value': [1, 2, 3, 4]
})

df_b = pd.DataFrame({
    'physical_name': ['b', 'd'],
    'value': [2, 4]
})

위와 같은 데이터프레임이 있을 때, df_a의 physical_name 컬럼을 기준으로 df_b에 없는 데이터를 필터링하려고 합니다.


방법 1: isin 함수 사용

pandas의 isin 함수는 특정 컬럼의 값을 기준으로 손쉽게 필터링할 수 있습니다. 아래는 df_a에서 df_b의 physical_name 값에 해당하지 않는 데이터를 선택하는 코드입니다.

# df_a에서 df_b에 없는 physical_name만 선택
df_diff = df_a[~df_a['physical_name'].isin(df_b['physical_name'])]
print(df_diff)

출력 결과

  physical_name  value
0             a      1
2             c      3

~ 연산자는 isin 함수 결과를 반전시켜, df_b의 physical_name 컬럼에 없는 데이터만 필터링합니다.


방법 2: merge 함수 사용

pandas의 merge 함수와 indicator 옵션을 사용하면, 두 DataFrame 간 조인 상태를 나타내는 _merge 컬럼을 생성할 수 있습니다. 이를 활용해 차집합을 구하는 방법은 다음과 같습니다.

# df_a와 df_b를 left join하고 indicator로 상태 표시
df_diff = df_a.merge(df_b, on='physical_name', how='left', indicator=True)

# left_only인 행만 필터링
df_diff = df_diff[df_diff['_merge'] == 'left_only'].drop(columns=['_merge'])
print(df_diff)

출력 결과

  physical_name  value_x
0             a        1
2             c        3

설명

  • how='left': df_a의 모든 행을 유지하면서 df_b와 조인합니다.
  • indicator=True: _merge 컬럼을 생성하여 조인 결과를 표시합니다.
    • left_only: df_a에만 있는 행
    • both: df_a와 df_b 모두에 있는 행
    • right_only: df_b에만 있는 행
  • _merge 값이 left_only인 행만 필터링하여 결과를 얻습니다.

정리

방법 장점 단점
isin 함수 간단하고 직관적임 특정 컬럼 기준으로만 동작
merge 함수 조인 상태를 세부적으로 확인 가능 코드가 약간 복잡

 

두 방법 모두 동일한 결과를 얻을 수 있으므로, 상황에 맞게 선택하면 됩니다. 단순히 특정 컬럼 기준으로 데이터를 필터링하려면 isin 함수를 사용하는 것이 간단하고 효율적입니다. 하지만 조인 결과를 더 세부적으로 분석하려면 merge 방식을 사용하는 것이 좋습니다.

반응형

'개발 (Development) > Python' 카테고리의 다른 글

[Python] Pandas DataFrame에서 for문을 이용해 특정 컬럼 값 변경하기  (0) 2025.05.18
[Python] Docker image load  (0) 2025.02.23
[Python] Python을 활용한 서로 다른 데이터베이스 쿼리 결과 비교 및 엑셀 매핑  (0) 2025.01.12
[Python] Excel 파일 간 문장 유사도 비교하기  (0) 2025.01.12
[Python] 엑셀 파일 간 데이터 비교 (여러 시트일 때)  (0) 2025.01.12
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] Pandas DataFrame에서 for문을 이용해 특정 컬럼 값 변경하기
  • [Python] Docker image load
  • [Python] Python을 활용한 서로 다른 데이터베이스 쿼리 결과 비교 및 엑셀 매핑
  • [Python] Excel 파일 간 문장 유사도 비교하기
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (216)
      • 개발 (Development) (151)
        • Algorithm (1)
        • Angular (1)
        • AWS (4)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (30)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (6)
        • PostgreSQL (37)
        • Python (26)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (10)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (10)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    AWS
    오답노트
    PostgreSQL
    리눅스 마스터 2급 2차
    자바
    typescript
    ADsP
    JPA
    Kafka
    docker
    Kubernetes
    springboot
    pandas
    python
    데이터분석
    Linux
    javascript
    Linux master
    java
    리눅스 마스터 2급
    Vue.js
    MyBatis
    timescaledb
    백준
    백준알고리즘
    JSON
    백준자바
    DevOps
    백준온라인저지
    deepseek
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] pandas를 이용한 DataFrame 차집합 구하기
상단으로

티스토리툴바