merge() 함수
- SQL 의 JOIN 처럼 데이터를 '기준 열' 을 기준으로 병합
- inner join
- outer join
- left join
- right join
import pandas as pd
# 예시 데이터프레임
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['A1', 'B2', 'C3']
})
df2 = pd.DataFrame({
'A': [1, 2, 4],
'C': ['X1', 'Y2', 'Z3']
})
# 'A' 열을 기준으로 병합
merged_df = pd.merge(df1, df2, on='A')
print(merged_df)
# 출력
A B C
0 1 A1 X1
1 2 B2 Y2
- merge() 의 기본값은 inner join
병합 유형
- 내부 조인 (inner join): 기본값입니다. 두 데이터프레임에서 공통된 키만 포함됩니다.
- 왼쪽 조인 (left join): 왼쪽 데이터프레임의 모든 값을 포함하고, 오른쪽 데이터프레임에서 일치하는 값만 추가합니다.
- 오른쪽 조인 (right join): 오른쪽 데이터프레임의 모든 값을 포함하고, 왼쪽 데이터프레임에서 일치하는 값만 추가합니다.
- 외부 조인 (outer join): 두 데이터프레임에서 모든 값을 포함하고, 일치하지 않는 값은 NaN으로 채웁니다.
더보기
# 왼쪽 조인
left_merged_df = pd.merge(df1, df2, on='A', how='left')
print(left_merged_df)
# 오른쪽 조인
right_merged_df = pd.merge(df1, df2, on='A', how='right')
print(right_merged_df)
# 외부 조인
outer_merged_df = pd.merge(df1, df2, on='A', how='outer')
print(outer_merged_df)
# left join 출력값
A B C
0 1 A1 X1
1 2 B2 Y2
2 3 C3 NaN
# right join 출력값
A B C
0 1 A1 X1
1 2 B2 Y2
2 4 NaN Z3
# outer join 출력값
A B C
0 1 A1 X1
1 2 B2 Y2
2 3 C3 NaN
3 4 NaN Z3
다중 열을 기준으로 병합
- 두 개 이상의 열을 기준으로 병합도 가능
# 예시 데이터프레임
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['A1', 'B2', 'C3'],
'key': ['K1', 'K2', 'K3']
})
df2 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['X1', 'Y2', 'Z3'],
'key': ['K1', 'K2', 'K3']
})
# 'A'와 'key' 열을 기준으로 병합
merged_df_multi = pd.merge(df1, df2, on=['A', 'key'])
print(merged_df_multi)
# 출력
A B key
0 1 A1 K1
1 2 B2 K2
2 3 C3 K3
concat() 함수
- 행 또는 열 기준으로 단순히 연결할 때 사용
- axis 를 이용해 방향설정
# 예시 데이터프레임
df1 = pd.DataFrame({
'A': [1, 2],
'B': ['A1', 'B2']
})
df2 = pd.DataFrame({
'A': [3, 4],
'B': ['C3', 'D4']
})
# 행 기준으로 병합 (기본값 axis=0)
concat_df = pd.concat([df1, df2])
print(concat_df)
# 출력
A B
0 1 A1
1 2 B2
0 3 C3
1 4 D4
더보기
인덱스 재정렬
- ignore_index=True 를 설정해 인덱스를 새로 부여
# 인덱스를 새로 부여하여 병합
concat_df_reset_index = pd.concat([df1, df2], ignore_index=True)
print(concat_df_reset_index)
# 출력
A B
0 1 A1
1 2 B2
2 3 C3
3 4 D4
join() 함수
- 주로 인덱스 기준으로 병합할때 사용
- 기본값 left join
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': ['A1', 'B2', 'C3']
}, index=['K1', 'K2', 'K3'])
df2 = pd.DataFrame({
'C': ['X1', 'Y2', 'Z3'],
'D': ['W1', 'X2', 'Y3']
}, index=['K1', 'K2', 'K3'])
# 인덱스를 기준으로 병합
joined_df = df1.join(df2)
print(joined_df)
# 출력
A B C D
K1 1 A1 X1 W1
K2 2 B2 Y2 X2
K3 3 C3 Z3 Y3
'Python > Pandas' 카테고리의 다른 글
[Pandas] 피벗 테이블 - pivot_table() (4) | 2024.12.16 |
---|---|
[Pandas] 그룹화 및 집계함수 (1) | 2024.12.16 |
[Pandas] 데이터 정렬 - sort_values(), sort_index(), rank() (0) | 2024.12.16 |
[Pandas] 타입 변환 - astype() (1) | 2024.12.16 |
[Pandas] 필터링 (0) | 2024.12.16 |