collection간 비교가 필요할 때 자주 사용하는 패턴이 보여서 정리하려고 한다
1. list vs list
i) 공통된 원소 비교 set(a) & set(b)
ii) 완전히 동일한 리스트인지 a == b
iii) 원소 같고 중복도 같은지 (순서 X) Counter(a) == Counter(b)
iv) 순서/중복 무시하고 포함 여부 확인 set(a).issubset(set(b))
v) 교집합 외 개수 비교 len(set(a) & set(b))
2. set vs set (보통은 그룹별 키가 얼마나 겹치나 볼 때 썼음)
i) 공통된 원소 a & b, a.intersection(b) 교집합
ii) 두 set의 모든 원소 (중복 제거) a | b, a.union(b) 합집합
iii) a에만 있는 원소 a - b, a.difference(b) 차집합
iv) 서로 다른 원소만 a ^ b, a.symmetric_difference(b) 대칭 차집합
v) a가 b의 (진)부분집합인지 a <= b, a.issubset(b) 부분집합 관계 확인
vi) a가 b의 진부분집합인지 a < b 진부분집합
vii) 겹치는 원소가 있는지 not a.isdisjoint(b) 공통 원소 존재 여부 판단
3. df vs df
| 완전 동일 여부 | `df1.equals(df2)` | 정렬까지 같아야 함 |
| 값 위치별 비교 | `df1 == df2` | 마스크 형태 결과. matrix 비교라 같은 행,렬 위치에 있는 값들끼리 == 비교한 것 |
| 행 단위 차이 추출 | `merge(..., indicator=True)` | 유용|
| key 기준 변경 추적 | `merge` + suffix + 비교 | 특정 컬럼 비교 |
| 열 값 변경 추적 | `df1.compare(df2)` | 깔끔한 차이만 추출 |
| 전체 row 존재 여부 | `set(map(tuple, df.values))` 방식 | 빠른 비교용 |
'파이썬' 카테고리의 다른 글
날짜 비교 시 자주 하는 간단한 실수 (0) | 2025.03.24 |
---|---|
[pandas] 결측 column 채우기 (0) | 2024.07.29 |
None, NaN, NaT 판단 시 주의점 (0) | 2024.04.29 |
[pandas] series type이 안정적으로 잡히지 않는 케이스 (0) | 2024.04.26 |
[Pandas] Dataframe list + for문 조합 시 유의사항 (0) | 2024.04.22 |