[Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법

2025. 7. 20. 21:53·개발 (Development)/Python

Python의 pandas를 활용하다 보면, 두 개의 DataFrame을 비교하여 한쪽에 포함된 값을 다른 쪽에서 제거해야 하는 상황이 자주 발생합니다. 예를 들어, 이미 처리된 데이터를 제거하거나, 제외 대상 명단을 기반으로 전체 목록을 정리할 때 사용할 수 있습니다.

이번 글에서는 이와 같은 상황에서 사용할 수 있는 isin()과 merge() 함수 활용법을 예시와 함께 소개해드리겠습니다.

문제 상황 정리

두 개의 DataFrame a와 b가 있다고 가정합니다. 이때 a에 포함된 값을 기준으로, 해당 값이 포함된 행을 b에서 제거하고자 합니다.

단일 열 기준으로 비교하고 제거하기

가장 간단한 경우는 한 개의 열(예: id)을 기준으로 비교하는 방법입니다.

import pandas as pd

# 예시 데이터
a = pd.DataFrame({'id': [1, 2, 3]})
b = pd.DataFrame({'id': [2, 3, 4, 5]})

# a에 포함된 id를 기준으로 b에서 제거
b_filtered = b[~b['id'].isin(a['id'])]

print(b_filtered)

이 코드를 실행하면 다음과 같은 결과를 얻을 수 있습니다.

   id
0   4
1   5

여기서 isin() 함수는 b['id']의 각 값이 a['id']에 포함되는지를 판단하고, ~ 연산자를 사용하여 포함되는 값을 제외시킵니다. 최종적으로 a에 들어 있는 ID를 b에서 제거한 결과가 b_filtered에 저장됩니다.

여러 열을 기준으로 비교하고 제거하기

두 개 이상의 열을 기준으로 행 전체를 비교하고 싶을 때는 merge() 함수와 indicator=True 옵션을 활용하는 방법이 유용합니다.

# 예시 데이터
a = pd.DataFrame({'id': [1, 2], 'name': ['Alice', 'Bob']})
b = pd.DataFrame({'id': [2, 3], 'name': ['Bob', 'Charlie']})

# 병합하여 공통 항목 확인
merged = pd.merge(b, a, on=['id', 'name'], how='left', indicator=True)

# 공통 항목 제외
b_filtered = merged[merged['_merge'] == 'left_only'].drop(columns=['_merge'])

print(b_filtered)

위 코드를 실행하면 다음과 같은 결과가 나옵니다.

   id     name
1   3  Charlie

여기서 indicator=True 옵션을 통해 _merge 열이 생성되며, 해당 열을 기준으로 b에만 있는 행만 남길 수 있습니다. 이렇게 하면 다중 조건 비교 후 제거 작업도 손쉽게 수행할 수 있습니다.

마무리: 정리

  1. 한 개의 열을 기준으로 비교할 경우 isin()과 ~ 연산자를 활용하여 제거할 수 있습니다.
  2. 여러 열을 기준으로 비교할 경우 merge() 함수와 indicator=True 옵션을 사용하면 효과적입니다.
  3. 필터링 결과는 새로운 DataFrame으로 저장하여 후속 작업에 활용할 수 있습니다.

이와 같은 방식은 데이터 전처리 과정에서 불필요한 행을 제거하거나 중복 작업을 방지할 때 매우 유용하게 사용할 수 있습니다. 필요에 따라 상황에 맞는 방법을 선택하여 적용해 보시기 바랍니다.

반응형

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

[Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기  (4) 2025.07.28
[Python] Pandas DataFrame에서 조건에 따라 행 삭제 및 특정 데이터 추출하는 방법 정리  (2) 2025.07.20
[Python] JSON 파일을 CSV로 변환  (1) 2025.06.01
[Python] 배열을 1000개 단위로 나누어 처리하는 방법  (0) 2025.05.18
[Python] Pandas DataFrame에서 값이 저장되지 않는 이유와 해결 방법  (0) 2025.05.18
'개발 (Development)/Python' 카테고리의 다른 글
  • [Python] 딕셔너리에서 정규표현식으로 특정 형식의 키 추출하기
  • [Python] Pandas DataFrame에서 조건에 따라 행 삭제 및 특정 데이터 추출하는 방법 정리
  • [Python] JSON 파일을 CSV로 변환
  • [Python] 배열을 1000개 단위로 나누어 처리하는 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Python] pandas로 DataFrame 비교하여 특정 값 제거하는 방법
상단으로

티스토리툴바