Skip to main content

데이터 합치기

실습 데이터

복사해서 붙여 쓰세요

import pandas as pd
import numpy as np

np.random.seed(42)

# 예제 1: 고객 정보 (df_user)
df_user = pd.DataFrame({
'user_id': [101, 102, 103, 104],
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': np.random.randint(20, 50, 4)
})

# 예제 2: 구매 내역 (df_purchase)
df_purchase = pd.DataFrame({
'purchase_id': [1001, 1002, 1003, 1004, 1005],
'user_id': [101, 103, 101, 104, 103],
'item': ['A', 'B', 'C', 'A', 'D']
})

# 예제 3: 2023년 데이터 (df_2023)
df_2023 = pd.DataFrame(
np.random.randint(0, 100, (3, 4)),
columns=['A', 'B', 'C', 'D'],
index=[202301, 202302, 202303]
)

# 예제 4: 2024년 데이터 (df_2024)
df_2024 = pd.DataFrame(
np.random.randint(0, 100, (3, 4)),
columns=['A', 'B', 'C', 'D'],
index=[202401, 202402, 202403]
)

행(Row) 기준 합치기

  • axis=0 (기본값): 위-아래로 합침.
  • 두 DataFrame의 컬럼 이름이 같아야 의미 있음.
pd.concat([df_2023, df_2024])
  • concat 후, 인덱스가 중복될 수 있음 (e.g., 202301, 202401...)
  • 기존 인덱스를 무시하고 0, 1, 2, ... 순서로 새 인덱스 부여.
pd.concat(
[df_2023, df_2024],
ignore_index=True
)

열(Column) 기준 합치기

  • axis=1: 좌-우로 합침.
  • 두 DataFrame의 인덱스(Index)를 기준으로 정렬/결합됨.
  • 인덱스가 한쪽에만 존재하면, 해당 행의 반대쪽 데이터는 NaN (결측치) 처리됨.
pd.concat([df_2023, df_2024], axis=1)

컬럼 값을 기준으로 합치기

  • pd.merge(): SQL에서 JOIN과 같음
  • concat과 달리, 공통된 '키(Key)' 컬럼을 기준으로 데이터를 병합.
  • user_id 컬럼의 값을 기준으로 df_user (고객 정보)와 df_purchase (구매 내역)을 결합
pd.merge(df_user, df_purchase, on='user_id')
  • 내부(inner) 조인: 양쪽에 모두 값이 있는 경우만 결합(기본)
pd.merge(df_user, df_purchase, on='user_id', how='inner')

외부 조인

  • 왼쪽 표에 오른쪽 표를 붙임(오른쪽 표에 해당하는 행이 없으면 빈 칸)
pd.merge(df_user, df_purchase, on='user_id', how='left')
  • 오른쪽 표에 왼쪽 표를 붙임(왼쪽 표에 해당하는 행이 없으면 빈 칸)
pd.merge(df_user, df_purchase, on='user_id', how='right')
  • 어느 쪽이든 표에 있으면 모두 포함(다른 표에 해당하는 행이 없으면 빈 칸)
pd.merge(df_user, df_purchase, on='user_id', how='outer')

키 컬럼 이름이 다를 때

  • 구매 데이터를 복사하여 user_id 컬럼을 customer_id로 바꿈
df_purchase_new = df_purchase.copy()
df_purchase_new.columns = ['purchase_id', 'customer_id', 'item']
df_purchase_new
  • left_onright_on으로 키 컬럼을 지정
pd.merge(df_user, df_purchase_new, left_on='user_id', right_on='customer_id')

퀴즈

사용자 정보 입력
퀴즈를 시작하기 전에 이름과 소속을 입력해주세요.

Q&A