Pandas를 사용하여 여러 데이터프레임을 열 기준으로 3방향 결합하는 방법
먼저, 3개의 데이터프레임을 준비합니다. 각 데이터프레임은 결합할 기준이 되는 공통 열을 가지고 있어야 합니다. 예를 들어, 고객 ID, 제품 ID 또는 날짜와 같은 열일 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df1 = pd.DataFrame({'customer_id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [30, 25, 22]})
df2 = pd.DataFrame({'customer_id': [1, 2, 3], 'address': ['서울', '부산', '인천'], 'phone': ['010-1234-5678', '011-9876-5432', '015-4321-7654']})
df3 = pd.DataFrame({'customer_id': [1, 2, 3], 'purchase_date': ['2023-01-01', '2023-03-01', '2023-05-01'], 'amount': [100000, 200000, 300000]})
3방향 결합
pd.merge()
함수를 사용하여 세 개의 데이터프레임을 결합할 수 있습니다. 먼저, left_on
및 right_on
매개변수를 사용하여 결합할 기준 열을 지정합니다. how
매개변수를 사용하여 결합 방식을 선택할 수 있습니다. 기본값은 'inner'이며, 이는 공통 열 값이 있는 행만 포함하는 것을 의미합니다.
# 3방향 결합
df_merged = pd.merge(left=df1, right=df2, on='customer_id', how='inner')
df_merged = pd.merge(left=df_merged, right=df3, on='customer_id', how='inner')
결과
결합된 데이터프레임은 다음과 같습니다.
customer_id name age address phone purchase_date amount
0 1 Alice 30 서울 010-1234-5678 2023-01-01 100000
1 1 Alice 30 서울 010-1234-5678 2023-03-01 200000
2 1 Alice 30 서울 010-1234-5678 2023-05-01 300000
3 2 Bob 25 부산 011-9876-5432 2023-01-01 100000
4 2 Bob 25 부산 011-9876-5432 2023-03-01 200000
5 2 Bob 25 부산 011-9876-5432 2023-05-01 300000
6 3 Charlie 22 인천 015-4321-7654 2023-01-01 100000
7 3 Charlie 22 인천 015-4321-7654 2023-03-01 200000
8 3 Charlie 22 인천 015-4321-7654 2023-05-01 300000
주의 사항
- 결합할 데이터프레임은 모두 공통 열을 가져야 합니다.
how
매개변수를 사용하여 원하는 결합 방식을 선택할 수 있습니다.- 결합된 데이터프레임에는 중복된 행이 포함될 수 있습니다. 필요에 따라 중복 행을 제
예제 코드
import pandas as pd
# 데이터프레임 생성
df1 = pd.DataFrame({'customer_id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [30, 25, 22]})
df2 = pd.DataFrame({'customer_id': [1, 2, 3], 'address': ['서울', '부산', '인천'], 'phone': ['010-1234-5678', '011-9876-5432', '015-4321-7654']})
df3 = pd.DataFrame({'customer_id': [1, 2, 3], 'purchase_date': ['2023-01-01', '2023-03-01', '2023-05-01'], 'amount': [100000, 200000, 300000]})
# 3방향 결합
df_merged = pd.merge(left=df1, right=df2, on='customer_id', how='inner')
df_merged = pd.merge(left=df_merged, right=df3, on='customer_id', how='inner')
# 결과 출력
print(df_merged)
pandas
라이브러리를 불러옵니다.df1
,df2
,df3
데이터프레임을 생성합니다. 각 데이터프레임은 'customer_id'라는 공통 열을 가지고 있습니다.pd.merge()
함수를 사용하여 세 개의 데이터프레임을 결합합니다.left=df1
매개변수는 왼쪽 데이터프레임으로df1
을 지정합니다.on='customer_id'
매개변수는 결합 기준 열을 'customer_id'로 지정합니다.how='inner'
매개변수는 공통 열 값이 있는 행만 포함하도록 합니다.
- 결합된 데이터프레임을
df_merged
변수에 저장합니다. print(df_merged)
를 사용하여 결합된 데이터프레임을 출력합니다.
이 예제에서는 how='inner'
매개변수를 사용하여 공통 열 값이 있는 행만 포함하도록 했습니다. 다른 how
값을 사용하여 다른 결합 방식을 시도할 수 있습니다.
how='outer'
: 모든 행을 포함합니다. 공통 열 값이 없는 행에는 NaN 값이 채워집니다.how='left'
: 왼쪽 데이터프레임의 모든 행과 오른쪽 데이터프레임에서 일치하는 행을 포함합니다. 일치하는 행이 없는 경우 오른쪽 데이터프레임의 열에는 NaN 값이 채워집니다.
Pandas를 사용하여 여러 데이터프레임을 열 기준으로 3방향 결합하는 대체 방법
concat과 append를 사용한 방법
concat
함수와 append
함수를 사용하여 데이터프레임을 연결한 다음, merge
함수를 사용하여 결합할 수 있습니다.
import pandas as pd
# 데이터프레임 생성
df1 = pd.DataFrame({'customer_id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [30, 25, 22]})
df2 = pd.DataFrame({'customer_id': [1, 2, 3], 'address': ['서울', '부산', '인천'], 'phone': ['010-1234-5678', '011-9876-5432', '015-4321-7654']})
df3 = pd.DataFrame({'customer_id': [1, 2, 3], 'purchase_date': ['2023-01-01', '2023-03-01', '2023-05-01'], 'amount': [100000, 200000, 300000]})
# 데이터프레임 결합
df_temp = pd.concat([df1, df2])
df_merged = pd.merge(left=df_temp, right=df3, on='customer_id', how='inner')
numpy의 stack과 unstack을 사용한 방법
numpy
라이브러리의 stack
과 unstack
함수를 사용하여 데이터프레임을 다차원 배열로 변환한 다음, merge
함수를 사용하여 결합할 수 있습니다.
import pandas as pd
import numpy as np
# 데이터프레임 생성
df1 = pd.DataFrame({'customer_id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [30, 25, 22]})
df2 = pd.DataFrame({'customer_id': [1, 2, 3], 'address': ['서울', '부산', '인천'], 'phone': ['010-1234-5678', '011-9876-5432', '015-4321-7654']})
df3 = pd.DataFrame({'customer_id': [1, 2, 3], 'purchase_date': ['2023-01-01', '2023-03-01', '2023-05-01'], 'amount': [100000, 200000, 300000]})
# 데이터프레임을 다차원 배열로 변환
df1_stacked = df1.set_index(['customer_id']).stack()
df2_stacked = df2.set_index(['customer_id']).stack()
df3_stacked = df3.set_index(['customer_id']).stack()
# 다차원 배열을 결합
stacked_merged = pd.concat([df1_stacked, df2_stacked, df3_stacked], axis=1)
# 다차원 배열을 데이터프레임으로 변환
df_merged = stacked_merged.unstack().reset_index()
itertools.product를 사용한 방법
itertools
라이브러리의 product
함수를 사용하여 데이터프레임 행의 모든 조합을 생성한 다음, merge
함수를 사용하여 결합할 수 있습니다.
import pandas as pd
import itertools
# 데이터프레임 생성
df1 = pd.DataFrame({'customer_id': [1, 2, 3], 'name': ['Alice', 'Bob', 'Charlie'], 'age': [30, 25, 22]})
df2 = pd.DataFrame({'customer_id': [1, 2, 3], 'address': ['서울', '부산', '인천'], 'phone': ['
python pandas join