랭귀지/pandas
merge
유키공
2025. 3. 26. 10:24
# 원본 merge 코드
df_merge = df2.merge(df3, how='left', left_on='a', right_on='b').set_index('d')
# join으로 변환한 코드
df_join = (
df2.set_index('a') # left_on='a' → 인덱스
.join(df3.set_index('b'), # right_on='b' → 인덱스
how='left')
.reset_index() # 인덱스(a)를 컬럼으로 복원
.set_index('d') # 최종 인덱스 설정
)
# 결과 비교
print(df_merge.equals(df_join)) # True여야 일치
# 원본 merge 결과와 100% 동일하게 만드는 방법
if df3.empty:
# 1. df2 복사
df_optimized = df2.copy()
# 2. df3의 모든 컬럼 처리 (b는 제외)
for col in df3.columns:
if col == 'b':
continue
# 컬럼이 df2에 이미 존재하는 경우 _x, _y 추가
if col in df_optimized.columns:
df_optimized[f"{col}_y"] = None # merge 시 df3 컬럼은 _y 접미사
else:
df_optimized[col] = None
# 3. 인덱스 설정
df_optimized = df_optimized.set_index('d')
else:
# 일반적인 병합 수행
df_optimized = df2.merge(df3, how='left', left_on='a', right_on='b').set_index('d')