매일공부

Python Pandas 차집합&대칭차집합 구하기 본문

Programming/Python

Python Pandas 차집합&대칭차집합 구하기

aram 2022. 8. 29. 22:04

pd.merge 활용 > 교집합을 포함한 차집합 구할 수 있음

 

- 교집합을 포함하지 않은 진짜 차집합만 구하려면?

pd.merge() + .query() + .drop() = 모두 함께 활용

Q. Series ser1에서 Series ser1에 있는 항목을 제거하시오
입력> ser1 = pd.Series([1, 2, 3, 4, 5])
          ser2 = pd.Series([4, 5, 6, 7, 8])
ser1 = pd.Series([1, 2, 3, 4, 5])
ser2 = pd.Series([4, 5, 6, 7, 8])
ser1.name = 0  #series data에 이름 부여
ser2.name = 0

#outer속성으로 합집합으로 merge하고 추가 열에 교집합 표시(indicator)
ser1 = pd.merge(ser1, ser2, how='outer', indicator=True) 
#_merge를 활용해서 ser1의 교집합 제거
ser1 = ser1.query('_merge == "left_only"').drop(columns=['_merge'])
print(ser1)
#출력
   0
0 1
1 2
2 3

 

- 교집합을 제외한 대칭차집합을 구하려면?

.query('_merge == "both")로 변경

Q. ser1과 ser2에서 공통적이지 않은 모든 항목을 가져오시오
입력> ser1 = pd.Series([1, 2, 3, 4, 5])
          ser2 = pd.Series([4, 5, 6, 7, 8])
import numpy as np
import pandas as pd
ser1 = pd.Series([1, 2, 3, 4, 5])
ser2 = pd.Series([4, 5, 6, 7, 8])
ser1.name = 0
ser2.name = 0
ser = pd.merge(ser1, ser2, how='outer', indicator=True)
ser = ser.query('_merge != "both"').drop(columns=['_merge'])
print(ser)
#출력
   0
0 1
1 2
2 3
5 6
6 7
7 8

 

 

[원본] 상세한 설명 : https://codealone.tistory.com/78

 

Comments