본문 바로가기
코딩/데이터분석(Pandas, ML, etc)

두 개의 판다스 데이터프레임에서 중복되지 않는 항목(차집합)만 걸러내는 방법

by 나홀로코더 2022. 5. 4.
반응형

목차

1. 주제 소개

2. 판다스로 차집합 구하기


 

1. 주제 소개

 

간단한 판다스 사용 요령을 하나 소개한다.

 

두 개의 데이터프레임을 비교, 대조하는 메서드로서 판다스는 joinmerge를 제공한다.

 

아마 데이터프레임 간에 겹치는 항목들, 즉 교집합을 구하는 데에 가장 자주 사용할 것이다.

 

그런데 joinmerge에 관한 판다스 문서를 보면 데이터프레임 간에 겹치치 않는 항목들, 즉 차집합을 구하는 방법은 나와 있지가 않다.

 

차집합 도표

 

예를 들어, 위의 도표에서 B가 기존에 가지고 있던 목록이고, A가 새로 확보한 목록인 경우, 기존 목록에는 없고 새로 확보한 목록에만 있는 항목을 뽑아내려면 어떻게 해야 할까?

 

반응형

 

2. 판다스로 차집합 구하기

 

아래의 자료를 대조하고 싶다고 가정하자. df1은 지난 달의 손님 목록이고, df2는 이번 달의 손님 목록이다.

 

예제 데이터

 

이 중에서 df1에는 없고 df2에만 있는 손님의 목록만 뽑아내고 싶다. 예제에서는 박코딩이라는 것을 바로 알 수 있지만 데이터가 조금만 커져도 표만 봐서는 알기 어려울 것이다.

 

아쉽지만 판다스에서 제공하는 joinmerge만 이용해서는 차집합만 바로 추출해서 볼 수가 없고, 3단계를 거쳐야 한다.

 

먼저 how‘outer’로 두고 merge를 한다. 이때, indicatorTrue로 두면 아래와 같이 _merge 열이 새로 생기면서 각 항목이 어느 쪽에 속하는지가 표시된다.

 

merge 결과

 

그런 다음 query를 이용해 _merge열의 값이 right_only인 값만 필터링하고, 마지막으로 _merge열을 drop해준다.

 

최종 결과

 

아래와 같이 merge, query, drop을 한번에 할 수도 있다.

 

한줄로 실행

 

[참고]

 

예제 코드와 판다스 데이터프레임 merge에 관한 설명글의 링크를 첨부하니 참고하기 바란다

 

pd.merge(df1, df2, how='outer', indicator = True).query('_merge == "right_only"').drop(columns=['_merge']))

 

https://towardsdatascience.com/how-to-merge-pandas-dataframes-221e49c41bec 

 

How To Merge Pandas DataFrames

Performing left, right, inner and anti joins with pandas DataFrames

towardsdatascience.com

 

 

반응형

댓글