| 공통점 | 설명 |
|---|---|
| 병합 기능 | 두 개의 DataFrame을 병합 (SQL의 JOIN처럼 동작) |
how 옵션 사용 | inner, left, right, outer 지원 |
| 기준 지정 가능 | 특정 key를 기준으로 병합 가능 |
기본 개념
주요 옵션
| 옵션 | 설명 |
|---|---|
on | 두 DataFrame에 모두 있는 열 기준 병합 |
left_on, right_on | 각 DataFrame에서 다른 열을 기준으로 병합 |
how | inner, left, right, outer (기본값은 inner) |
suffixes | 열 이름 충돌 시 붙일 접미사 설정 |
기본 on 병합
df1 = pd.DataFrame({'id': [1, 2], 'name': ['영희', '철수']})
df2 = pd.DataFrame({'id': [1, 2], 'score': [95, 88]})
pd.merge(df1, df2, on='id')
| index | id | name | score |
|---|---|---|---|
| 0 | 1 | 영희 | 95 |
| 1 | 2 | 철수 | 88 |
how='outer' 병합
df1 = pd.DataFrame({'id': [1, 2], 'name': ['영희', '철수']})
df2 = pd.DataFrame({'id': [2, 3], 'score': [88, 77]})
pd.merge(df1, df2, on='id', how='outer')
| index | id | name | score |
|---|---|---|---|
| 0 | 1 | 영희 | NaN |
| 1 | 2 | 철수 | 88.0 |
| 2 | 3 | NaN | 77.0 |
서로 다른 열 기준 병합 (left_on, right_on)
df1 = pd.DataFrame({'name': ['영희', '철수'], 'class_id': [1, 2]})
df2 = pd.DataFrame({'group': [1, 2], 'score': [90, 80]})
pd.merge(df1, df2, left_on='class_id', right_on='group', how='left'
기본 개념
주요 옵션
| 옵션 | 설명 |
|---|---|
how | left, right, outer, inner (기본: left) |
on | 인덱스 대신 특정 열 기준으로 병합할 수도 있음 |
lsuffix, rsuffix | 열 이름이 중복될 때 접미사 지정 |
df1 = pd.DataFrame({'name': ['영희', '철수']}, index=['a', 'b'])
df2 = pd.DataFrame({'score': [90, 80]}, index=['a', 'c'])
df1.join(df2, how='outer')
| name | score | |
|---|---|---|
| a | 영희 | 90 |
| b | 철수 | NaN |
| c | NaN | 80 |
열을 기준으로 병합 (on 사용)
df1 = pd.DataFrame({'id': [1, 2], 'name': ['영희', '철수']})
df2 = pd.DataFrame({'id': [1, 2], 'score': [90, 88]})
df1.set_index('id').join(df2.set_index('id'))
| id | name | score |
|---|---|---|
| 1 | 영희 | 90 |
| 2 | 철수 | 88 |
| 상황 | 추천 메서드 | 이유 |
|---|---|---|
| 열 기준 병합 | merge() | SQL처럼 열을 키로 지정 가능 |
| 인덱스 기준 병합 | join() | 더 간단하고 직관적 |
| 서로 다른 기준 열 | merge() | left_on, right_on 등 유연하게 사용 가능 |
| 여러 조건으로 병합 | merge() | 다중 key 지원 (on=['a','b']) |