Pandas 함수 - (pd.merge(DataFrame, DataFrame, how=(inner, outer, left of right), on=(어떤 열을 기준으로 합 칠지)

- 한 데이터 프레임에는 있지만 다른 데이터 프레임에는 없는 열이 있을 수 있고 혹은 한 데이터 프레임에 없는 행이 있을 수 있는 경우에는 데이터 프레임을 merge 시켜야 한다.

merge 함수 사용 시 중요한 점

1. 'on'  = 열은 각 행마다 고유한 기본 식별자여야 한다.(열의 값이 각 행마다 모두 다르게 설정되어야 한다는 것입니다.)

2. 'how' = 열에서 테이블 어떻게 merge 할 지 결정해야 한다. 

3. 즉,  how = 어떤 방법으로 merge할지 on = 어떤 열을 기준으로 merge할 지 결정하는 것이다.

Inner :  두 테이블에서 일치하는 레코드 집합이 된다.

- 다이어그램에서 보면 교집합에 해당된다.

registrations = pd.DataFrame({'reg_id':[1,2,3,4],'name':['Andrew','Bobo','Claire','David']})
logins = pd.DataFrame({'log_id':[1,2,3,4],'name':['Xavier','Andrew','Yolanda','Bobo']})

pd.merge(registrations, logins, how='inner', on='name')

- 해당 코드는 등록과 로그인을 한 사람을 찾기 위해 Inner를 사용한다.

위의 코드 결과

 

Left and Right : 두 테이블에서 한 쪽의 레코드를 기준으로한 집합이 된다.

왼쪽 또는 오른쪽에 있는 열에 값은 모두 출력 된다.

 

  • 겹치는 값이 있는 열: name 열처럼 왼쪽 또는 오른쪽에 존재하고, 값이 일치하는 경우에는 해당 값이 기준?이 되어 행이 병합됩니다.
  • 오른쪽 데이터프레임에만 있는 열: 오른쪽 데이터프레임에만 존재하고 왼쪽 데이터프레임에는 없는 열(예: log_id)은 왼쪽 데이터프레임에 일치하는 값이 없으면 결과에 포함되지 않습니다.(NaN으로 표현)
pd.merge(left=registrations, right=logins, how='left', on='name')

pd.merge(left=registrations, right=logins, how='right')
# on 옵션은 주요 옵션이 하나만 있을 경우 pandas는 알아서 판단하여 출력해준다.

 

- 위의 코드는 왼쪽의 데이터 값 또는 오른 쪽의 데이터 값들을 기준으로 출력해주는 코드이다.

위의 코드 결과

 

Outer : 두 테이블의 레코드를 기준으로한 집합이다.

다이어 그램에서의 합집합을 생각하면 된다.

pd.merge(registrations, logins, how='outer', on='name')

위의 코드 결과


column이 서로 다른 상태에서 merge하는 방법

 

# 방법 1
registrations = registrations.set_index('name')
# 인덱스를 registrations의 name으로 바꾼다. 그럼 두 개의 데이터 테이블의 column이 달라졌다.

pd.merge(registrations, logins, left_index=True, right_on='name', how='inner')
# 이렇게 left_index=True와 right_on='name'을 매개변수로 정해주면 결국 name을 기준으로 merge를
# 하는 것이다.

# 방법 2
registrations.columns = ['reg_name', 'reg_id']
# column명에 동일한 이름이 없게 만들었다.

pd.merge(registrations, logins, how='inner', left_on='reg_name', right_on='name')
# 이럴 경우는 left_on, right_on 매개변수를 사용하여 합칠 기준을 위의 코드 처럼 정해주면 된다.

registrations.columns = ['name', 'id']
logins.columns = ['id', 'name']
# 두 개의 데이터 프레임 column명을 같게 만들었다.

pd.merge(registrations, logins, how='inner', on='name')
# 이 경우는 아래 그림과 같이 합쳐졌을 떄 pandas가 자동으로 이름을 정해서 출력해준다.
pd.merge(registrations, logins, how='inner', on='name', suffixes=('_reg', '_log'))
# 아니면 사용자가 suffixes 매개변수를 사용하여 이름을 바꿔주면 된다.

pd.merge() 함수는 다양한 매개변수를 제공하여 여러 가지 병합 조건을 처리할 수 있게 설계되어 있다.

이를 통해 데이터프레임의 구조가 다르더라도 공통된 값이 있다면 병합할 수 있다.

728x90

'Data Analyst > ML' 카테고리의 다른 글

ML - PANDAS(Condition-Filtering)  (0) 2024.08.29
ML - PANDAS(DATA FRAME) - 2  (1) 2024.08.28
ML - PANDAS(Data Frame) - 1  (0) 2024.08.28
ML - Pandas(Series)  (1) 2024.08.27
ML - Pandas(Combining DataFrames) - 1  (0) 2024.08.22
hmm06