728x90
[Pandas] 데이터 프레임 비교하기
Pandas 설치
- pandas 설치
pip install pandas
- 라이브러리 import
import pandas as pd
비교 데이터
: 학번 3000, 5000 학생의 성적이 다름
- DataFrame1 : 2022년 학생 정보
df2022 = pd.DataFrame({
'학번' : [1000, 2000, 3000, 4000, 5000],
'성적' : ['A', 'B', 'C', 'A', 'F'],
'지도교수' : ['James', 'peter', 'jon', 'sara', 'michael']
})
- DataFrame2 : 2023년 학생 정보
df2023 = pd.DataFrame({
'학번' : [1000, 2000, 3000, 4000, 5000],
'성적' : ['A', 'B', 'F', 'A', 'A'],
'지도교수' : ['James', 'peter', 'jon', 'sara', 'michael']
})
동일 여부 판단
- Pandas의 equals 함수 이용
df2022.equals(df2023)
다른 값 찾기
(1) 데이터를 병합 한 후 중복 행을 제거하는 방법
drop_duplicates : 데이터 프레임에서 중복을 제거하는 함수
df_diff = pd.concat([df2022,df2023]).drop_duplicates(keep=False)
print(df_diff)
- 결과
학번 성적 지도교수
2 3000 C jon
4 5000 F michael
2 3000 F jon
4 5000 A michael
- 특정 행만 남기게 지정 할 수 있음
인덱스를 기준으로 가장 앞에 있는 행만 남음
df_diff.drop_duplicates(['학번'], keep = 'first')
학번 성적 지도교수
2 3000 C jon
4 5000 F michael
인덱스를 기준으로 가장 마지막에 있는 행만 남음
df_diff.drop_duplicates(['지도교수'], keep = 'last')
학번 성적 지도교수
2 3000 F jon
4 5000 A michael
- 인덱스 재설정
df_diff.drop_duplicates(['학번'], keep='first', ignore_index = True)
학번 성적 지도교수
0 3000 C jon
1 5000 F michael
(2) 데이터프레임의 다른부분을 반환
- 데이터 프레임 병합
df = pd.concat([df2022,df2023])
- 기존 Index 초기화
df.reset_index(drop=True)
- 인자로 주어진 Column들의 Values 들의 만들어질 수 있는 모든 경우를 구함
- 그 경우에 해당하는 Row의 Index를 Dictionary 형태로 반환
df.groupby(list(df.columns)).groups)
- Value의 길이가 1개 = Data를 가지고 있는 row가 1개 밖에 없음 = 데이터프레임의 다른 부분
idx = [diff[0] for diff in df.groupby(list(df.columns)).groups.values() if len(diff) == 1]
- 데이터 프레임으로 추출
df.reindex : 데이터프레임에 직접 영향을 주지 않고, 새로운 데이터 프레임을 반환
df.reindex(idx)
- 실행
def GetDifferences(df1, df2):
df = pd.concat([df1, df2]).reset_index(drop=True)
idx = [diff[0] for diff in df.groupby(list(df.columns)).groups.values() if len(diff) == 1]
return print(df.reindex(idx))
GetDifferences(df2022,df2023)
학번 성적 지도교수
2 3000 C jon
7 3000 F jon
9 5000 A michael
4 5000 F michael
참조
https://stackoverflow.com/questions/20225110/comparing-two-dataframes-and-getting-the-differences
반응형
'👩💻 Develope > Python' 카테고리의 다른 글
[Pandas] 데이터프레임 정렬하기 (0) | 2023.04.06 |
---|---|
[Pandas] 데이터프레임에서 대칭 차집합 구하기 (0) | 2023.04.05 |
[Pandas] 데이터프레임에서 차집합 구하기 (1) | 2023.04.04 |
들여쓰기 (Indentation) (0) | 2023.03.23 |
Pycharm & Anaconda (1) | 2023.02.22 |