> 백엔드 개발 > 파이썬 튜토리얼 > 한 Pandas DataFrame에서 다른 Pandas DataFrame에 없는 행을 효율적으로 추출하는 방법은 무엇입니까?

한 Pandas DataFrame에서 다른 Pandas DataFrame에 없는 행을 효율적으로 추출하는 방법은 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-06 18:44:12
원래의
728명이 탐색했습니다.

How to Efficiently Extract Rows from One Pandas DataFrame that are Absent in Another?

다른 데이터 프레임에서 제외된 한 데이터 프레임의 행 검색

Pandas에서는 잠재적으로 데이터가 겹칠 수 있는 여러 데이터 프레임이 있는 것이 일반적입니다. 자주 발생하는 작업 중 하나는 다른 데이터 프레임에 없는 한 데이터 프레임의 행을 격리하는 것입니다. 이 작업은 하위 집합으로 작업하거나 데이터를 필터링할 때 특히 유용합니다.

문제 공식화:

df1이 df2와 비교하여 행의 상위 집합을 포함하는 두 개의 Pandas 데이터 프레임이 있다고 가정하면, 우리는 df2에서 찾을 수 없는 df1의 행을 얻는 것을 목표로 합니다. 아래 예에서는 간단한 사례로 이 시나리오를 보여줍니다.

import pandas as pd

df1 = pd.DataFrame(data={'col1': [1, 2, 3, 4, 5], 'col2': [10, 11, 12, 13, 14]})
df2 = pd.DataFrame(data={'col1': [1, 2, 3], 'col2': [10, 11, 12]})

print(df1)
print(df2)

# Expected result:
#   col1  col2
# 3     4    13
# 4     5    14
로그인 후 복사

해결책:

이 문제를 효과적으로 해결하기 위해 Left Join이라는 기술을 사용합니다. 이 작업은 df1의 모든 행이 유지되도록 하면서 df1과 df2를 병합합니다. 또한 병합 후 각 행의 원본을 식별하는 표시기 열을 포함합니다. df2의 고유 행을 활용하고 중복 항목을 제외함으로써 원하는 결과를 얻을 수 있습니다.

아래 Python 코드는 이 솔루션을 구현합니다.

df_all = df1.merge(df2.drop_duplicates(), on=['col1', 'col2'], how='left', indicator=True)
result = df_all[df_all['_merge'] == 'left_only']
로그인 후 복사

설명:

  1. 왼쪽 조인: 병합 기능은 왼쪽 조인을 수행합니다. df1과 df2.drop_duplicates()를 결합합니다. 이 작업은 col1 및 col2 열의 일치하는 값을 기반으로 df1의 행을 df2의 행과 병합합니다.
  2. 병합 표시기: 표시기 매개변수는 _merge라는 추가 열을 포함하도록 True로 설정됩니다. 결과 데이터 프레임 df_all에서. 이 열은 각 행의 출처를 나타냅니다. 즉, df1과 df2 모두에 존재하는 행은 'both', df1에 없는 행에는 'left_only', df2에 없는 행에는 'right_only'입니다.
  3. 'left_only'로 필터링: df2에 없는 df1의 행을 격리하기 위해 행을 확인하여 df_all 데이터 프레임을 필터링합니다. _merge는 'left_only'와 같습니다. 이를 통해 원하는 결과를 얻을 수 있습니다.

일반적인 함정 방지:

일부 솔루션에서는 일치하는 대신 개별 열 값을 잘못 확인할 수 있다는 점에 유의하는 것이 중요합니다. 전체적으로 행. 이러한 접근 방식은 아래 예에 설명된 것처럼 잘못된 결과를 초래할 수 있습니다.

~df1.col1.isin(common.col1) & ~df1.col2.isin(common.col2)
로그인 후 복사

이 코드는 행에서 값의 결합 발생을 고려하지 않으며 df1의 행에 개별적으로 나타나는 값이 있는 경우 잘못된 결과를 생성할 수 있습니다. df2에는 있지만 동일한 행에는 없습니다.

위에 설명된 왼쪽 조인 접근 방식을 채택하여 파생 행이 df1에 대한 배타적 행으로 올바르게 식별되도록 합니다. 이 기술은 한 데이터프레임에는 있지만 다른 데이터프레임에는 없는 행을 추출하는 안정적이고 효율적인 솔루션을 제공합니다.

위 내용은 한 Pandas DataFrame에서 다른 Pandas DataFrame에 없는 행을 효율적으로 추출하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿