# 세로 방향으로 통합하기
import pandas as pd
pd.concat([DataFrame_data1, DataFrame_data2])
df1 = pd.DataFrame({
'Class1': [95, 92, 98, 100],
'Class2': [91, 93, 97, 99]
})
df2 = pd.DataFrame({
'Class1': [87, 89],
'Class2': [85, 90]
})
result = pd.concat([df1, df2])
result
# Class1 Class2
# 0 95 91
# 1 92 93
# 2 98 97
# 3 100 99
# 0 87 85
# 1 89 90
df3 = pd.DataFrame({
'Class1': [96, 83]
})
# 생성된 데이터에서 순차적으로 index가 증가하도록 만들기
pd.concat([result, df3], ignore_index=True)
# Class1 Class2
# 0 95 91.0
# 1 92 93.0
# 2 98 97.0
# 3 100 99.0
# 4 87 85.0
# 5 89 90.0
# 6 96 NaN
# 7 83 NaN
# 가로 방향으로 통합하기
DataFrame_data1.join(DataFrame_data2)
df4 = pd.DataFrame({
'Class3': [93, 91, 95, 98]
})
df1.join(df4)
# Class1 Class2 Class3
# 0 95 91 93
# 1 92 93 91
# 2 98 97 95
# 3 100 99 98
# index label을 지정한 DataFrame의 데이터의 경우
index_label = ['a','b','c','d']
df1a = pd.DataFrame({'Class1': [95, 92, 98, 100],
'Class2': [91, 93, 97, 99]}, index= index_label)
df4a = pd.DataFrame({'Class3': [93, 91, 95, 98]}, index=index_label)
df1a.join(df4a)
# Class1 Class2 Class3
# a 95 91 93
# b 92 93 91
# c 98 97 95
# d 100 99 98
# index label이 다른 경우
index_label = ['a','b','c','d']
df1a = pd.DataFrame({'Class1': [95, 92, 98, 100],
'Class2': [91, 93, 97, 99]})
df4a = pd.DataFrame({'Class3': [93, 91, 95, 98]}, index=index_label)
df1a.join(df4a)
# Class1 Class2 Class3
# 0 95 91 NaN
# 1 92 93 NaN
# 2 98 97 NaN
# 3 100 99 NaN
# ==> join() 실행 전 index label 체크하기!
df4a.index == df1a.index # array([False, False, False, False])
# 특정 열을 기준으로 통합하기
DataFrame_left_data.merge(DataFrame_right_data)
df_A_B = pd.DataFrame({'판매월': ['1월', '2월', '3월', '4월'],
'제품A': [100, 150, 200, 130],
'제품B': [90, 110, 140, 170]})
df_C_D = pd.DataFrame({'판매월': ['1월', '2월', '3월', '4월'],
'제품C': [112, 141, 203, 134],
'제품D': [90, 110, 140, 170]})
df_A_B.merge(df_C_D)
# 판매월 제품A 제품B 제품C 제품D
# 0 1월 100 90 112 90
# 1 2월 150 110 141 110
# 2 3월 200 140 203 140
# 3 4월 130 170 134 170
# df_A_B.join(df_C_D)의 경우 오류 발생
# ValueError: columns overlap but no suffix specified: Index(['판매월'], dtype='object')
# join()의 경우, merge()와 다르게 column이 겹치면 안 됨
- 데이터가 특정 열을 기준으로 일부만 공통된 값을 갖는 경우
df_left = pd.DataFrame({'key':['A','B','C'], 'left': [1, 2, 3]})
df_right = pd.DataFrame({'key':['A','B','D'], 'right': [4, 5, 6]})
df_left.merge(df_right, how = 'left', on = 'key')
# key left right
# 0 A 1 4.0
# 1 B 2 5.0
# 2 C 3 NaN
df_left.merge(df_right, how = 'right', on = 'key')
# key left right
# 0 A 1.0 4
# 1 B 2.0 5
# 2 D NaN 6
df_left.merge(df_right, how = 'outer', on = 'key') # FULL JOIN
# key left right
# 0 A 1.0 4.0
# 1 B 2.0 5.0
# 2 C 3.0 NaN
# 3 D NaN 6.0
df_left.merge(df_right, how = 'inner', on = 'key') # 교집합
# key left right
# 0 A 1 4
# 1 B 2 5
728x90
'Python' 카테고리의 다른 글
[Python] 튜플(vs 리스트) (4) | 2024.01.09 |
---|---|
[Python] 리스트 (0) | 2024.01.09 |
[Python] 문자열 (2) | 2024.01.03 |
[Python] 변수 (4) | 2024.01.03 |
[Python] 논리 연산과 비교 연산 (4) | 2024.01.02 |