아미(아름다운미소)

merge 본문

랭귀지/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')
Comments