👩‍💻 Develope/Python

[Pandas] 데이터프레임에서 차집합 구하기

heywantodo 2023. 4. 4. 13:21
728x90
반응형

[Pandas] 데이터프레임에서 차집합 구하기 

앞 포스팅에 데이터 Pandas를 활용해 프레임을 비교하는 코드 작성

https://heywantodo.tistory.com/40

 

[Pandas] 데이터 프레임 비교하기

Pandas를 활용하여 데이터 프레임 비교하기 Pandas 설치 pandas 설치 pip install pandas 라이브러리 import import pandas as pd 비교 데이터 : 학번 3000, 5000 학생의 성적이 다름 DataFrame1 : 2022년 학생 정보 df2022 = pd

heywantodo.tistory.com

 

하지만 위와 같은 방법은 어느 한쪽의 데이터가 더 많을 경우에, 

어떤 데이터프레임에 없고 어떤 데이터프레임에 있는 결과인지 분간하기 어려웠음

 

이리저리 찾아보던 중 Pandas를 통해 차집합을 구할 수 있는 방법을 확인

 

목표

: 기존 목록(B)엔 없고 새로 확보한 목록(A)에 있는 항목을 뽑아 내기

 

데이터 준비

  • df1 (기존 데이터)
df1 = pd.DataFrame({
    '이름' : ['수박', '사과', '딸기', '참외', '메론'],
    '가격' : [10000, 5000, 9000, 6000, 11000]
})
  • df2 (새로운 데이터)
df2 = pd.DataFrame({
    '이름' : ['수박', '사과', '딸기', '참외', '메론', '배'],
    '가격' : [10000, 5000, 9000, 6000, 11000, 7000]
})

 

차집합 구하기

🔎 Pandas how 파라미터

 

1️⃣ how = 'inner'

  • 데이터 프레임 간 교집합을 출력
  • default 값이기 때문에 생략 가능

 

2️⃣ how = 'outer'

  • 데이터 프레임 간 합집합 결과를 출력
  • 없는 데이터는 NaN 처리

 

3️⃣ how = 'left', how = 'right'

  • left는 merge 함수의 왼쪽 데이터 프레임 기준으로 결합
  • right는 merge 함수의 오른쪽 데이터 프레임 기준으로 결합

  • 데이터 프레임 merge

indicator=True 사용 시 _merge열이 생기면서 각 항목이 어느쪽에 속하는지 표시됨

df = pd.merge(df1, df2, how='outer', indicator=True)
   이름     가격      _merge
0  수박  10000        both
1  사과   5000        both
2  딸기   9000        both
3  참외   6000        both
4  메론  11000        both
5   배   7000  	  right_only
  • right_only 값만 놔두고 나머지 값들은 drop
df.query('_merge == "right_only"').drop(columns=['_merge'])
  이름    가격
5  배  	 7000
  • 한번에 사용 가능
pd.merge(
	df1, df2, how='outer', indicator=True
    ).query(
    	'_merge == "right_only"'
        ).drop(columns=['_merge']
        )
  이름    가격
5  배 	 7000

 

 

참조

https://ybworld.tistory.com/63

https://codealone.tistory.com/78

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

728x90
반응형