[Pandas 기초] 데이터프레임 병합

soyyeong·2023년 2월 28일
0
post-thumbnail

데이터프레임 병합 merge()

기본형태
df.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)

왼쪽 열을 축으로 병합하기

# 데이터 프레임 만들기
adf = pd.DataFrame({'x1' : ['A', 'B', 'C'],
                    'x2' : [1, 2, 3]})
                    
bdf = pd.DataFrame({'x1' : ['A', 'B', 'D'],
                    'x3' : ['T', 'F', 'T']})

위는 adf, 아래는 bdf라는 데이터프레임이 있다.
이때 x1 열을 키로 하여 adf 데이터프레임을 기준으로 병합하고 싶을 때 아래와 같이 how에는 기준이 되는 데이터프레임, on에는 키로하고자 하는 열이름을 넣음.

# x1을 키로 병합, 왼쪽(adf)을 기준으로
# 왼쪽의 adf에는 D가 없으므로 해당 값은 NaN으로 변함
pd.merge(adf, bdf, how = 'left', on = 'x1')

오른쪽 열을 축으로 병합하기

adf 말고 bdf 기준으로 병합하고 싶으면 이렇게 오른쪽으로 바꾸면 됨.

# x1을 키로 병합, 오른쪽(bdf)을 기준으로
# 오른쪽의 bdf에는 C가 없으므로 해당 값은 NaN으로 변함
pd.merge(adf, bdf, how='right', on='x1')

공통 값으로 병합

공통된 값끼리만 병합하려면 how='inner'로 바꾸면 된다.

pd.merge(adf, bdf, how='inner', on='x1')
adf와 bdf 에서 x1 열의 공통된 A, B만이 출력된 걸 볼 수 있다.

모든 값을 병합

adf, bdf의 공통된 열인 x1에서 모든 값을 출력하려면 how='outer'

pd.merge(adf, bdf, how='outer', on='x1')

특정 열을 비교해 공통 값이 존재하는 경우만 가져오기

# adf와 bdf의 특정 열을 비교해 공통 값이 존재하는 경우만 출력
# adf.x1열과 bdf.x1열은 A와 B가 같으므로 adf의 해당 값만 출력함
adf[adf.x1.isin(bdf.x1)]

공통 값이 존재하는 경우 해당 값을 제외하고 병합하기

adf[~adf.x1.isin(bdf.x1)]

공통 값이 있는 것만 병합하기

이 두 데이터프레임이 있을 때 공통 값이 있는 것만 병합하려고 한다.
pd.merge(adf, cdf)
다음처럼 공통된 값이 있는 행이 추출됐다.

모두 병합하기

pd.merge(adf, cdf, how='outer')

어디에서 병합되었는지 보기

pd.merge(adf, cdf, how='outer', indicator=True)

원하는 병합만 남기기

pd.merge(adf, cdf, how='outer', indicator=True).query('_merge=="left_only"')

_merge 칼럼 없애기

pd.merge(adf, cdf, how='outer', indicator=True).query('_merge=="left_only"').drop(columns=['_merge'])

Reference

profile
블로그 이전 중입니다 : https://soyeong-blog.netlify.app/

0개의 댓글