728x90
[Pandas] 데이터프레임에서 차집합 구하기
앞 포스팅에 데이터 Pandas를 활용해 프레임을 비교하는 코드 작성
https://heywantodo.tistory.com/40
하지만 위와 같은 방법은 어느 한쪽의 데이터가 더 많을 경우에,
어떤 데이터프레임에 없고 어떤 데이터프레임에 있는 결과인지 분간하기 어려웠음
이리저리 찾아보던 중 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
반응형
'👩💻 Develope > Python' 카테고리의 다른 글
[Pandas] 데이터프레임 정렬하기 (0) | 2023.04.06 |
---|---|
[Pandas] 데이터프레임에서 대칭 차집합 구하기 (0) | 2023.04.05 |
[Pandas] 데이터 프레임 비교하기 (0) | 2023.04.01 |
들여쓰기 (Indentation) (0) | 2023.03.23 |
Pycharm & Anaconda (1) | 2023.02.22 |