pandas merge (feat. join)

2021. 8. 23. 15:45python/pandas, numpy

728x90

# DataFrame의 merge(결합, 합병하다)

# Database의 table의 join과 같은 개념.

import numpy as np
import pandas as pd

data1 = {'학번': [1, 2, 3, 4],
         '이름': ['아이유','김연아','홍길동','강감찬'],
         '학과': ['철학', '경영', '컴퓨터', '물리']}

data2 = {'학번': [1, 2, 4, 5],
         '학년': [2, 4, 3, 1],
         '학점': [1.5, 2.0, 4.1, 3.8]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)

 



# merge ( inner join ) - 연결점이 있는것만 연결해서 만든다
df3 = pd.merge(df1, df2, on='학번', how='inner')

# 순서가 의미가 있다 어떤게 왼쪽에 나오느냐

#on(~에 대해서 , ~ 를 가지고) = 어떤걸 기준으로 합칠것인지

display(df3)

data2 = {'학번': [1, 2, 4, 1], 일때 

1:1 연결이 아니라 colum이 같다면 찾아서 연결 

 

 

outer join
(잇든 없든 다 합친다) - 즉 연결점이 없어도 결과에 다 포함

merge ( full outer join )

df3 = pd.merge(df1, df2, on='학번', how='outer')

display(df3)

 

학번 3, 5 를 주의 비교해서 살펴보라


밑 2개의 사진은 제일 상단의 보기와 같다

먼저 나오므로 왼쪽

 

나중에 나오므로 오른쪽

 

 

# merge ( left outer join ) - full outer join에서 left만 포함한다
# df3 = pd.merge(df1, df2, on='학번', how='left')

왼쪽인 강감찬만 포함

 

 

# merge ( right outer join ) - full outer join에서 right만 포함한다
df3 = pd.merge(df1, df2, on='학번', how='right')

오른쪽인 5번만 포함

 


 

# DataFrame의 merge(결합)

# Database의 table의 join과 같은 개념.

import numpy as np
import pandas as pd

data1 = {'학번': [1, 2, 3, 4],
         '이름': ['아이유','김연아','홍길동','강감찬'],
         '학과': ['철학', '경영', '컴퓨터', '물리']}

data2 = {'학생학번': [1, 2, 4, 5],
         '학년': [2, 4, 3, 1],
         '학점': [1.5, 2.0, 4.1, 3.8]}

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)



# merge ( inner join )
# on : 두개의 DataFrame에 공통이름을 가지는 column이 존재할 때
# 만약 DataFrame을 merge시킬 기준이 되는 컬럼의 이름이 다른경우??

df3 = pd.merge(df1, df2, left_on='학번', right_on='학생학번', how='inner')
# 왼쪽은 이거 오른쪽은 이거

display(df3)


 

하나의 DataFrame의 컬럼과 다른 DataFrame의 index를 기준으로 merge를 하려면 어떻게 해야 하나요?

 

 

data2 = {'학년': [2, 4, 3, 1],
         '학점': [1.5, 2.0, 4.1, 3.8]}   와 같이 연결시킬수 있는 colum mergy가 없는 경우

df2 = pd.DataFrame(data2, 
                   index=[1, 2, 4, 5]) 으로 index 변경 (left의 학번을 맞추기 위해)

df3 = pd.merge(df1, df2, left_on='학번', right_index=True, how='inner')

왼쪽의 학번과 오른쪽의 인덱스가 매칭될때 

 

 

 


 

둘다 colum이 아닌 index로도 merge가 가능하다

 

 

# DataFrame의 merge(결합)

# Database의 table의 join과 같은 개념.

import numpy as np
import pandas as pd

data1 = {'이름': ['아이유','김연아','홍길동','강감찬'],
         '학과': ['철학', '경영', '컴퓨터', '물리']}

data2 = {'학년': [2, 4, 3, 1],
         '학점': [1.5, 2.0, 4.1, 3.8]}

df1 = pd.DataFrame(data1,
                   index=[1, 2, 3, 4])
df2 = pd.DataFrame(data2, 
                   index=[1, 2, 4, 5])

display(df1)
display(df2)


# merge ( inner join )
# on : 두개의 DataFrame에 공통이름을 가지는 column이 존재할 때

df3 = pd.merge(df1, df2, left_index=True, right_index=True, how='inner')


display(df3)

 

 

'python > pandas, numpy' 카테고리의 다른 글

pandas Grouping  (0) 2021.08.23
pandas concat(연결), 결측치, 이상치, 중복행  (0) 2021.08.23
pandas 공분산, 정렬  (0) 2021.08.21
pandas 인덱스 와 컬럼(index & colum)  (0) 2021.08.20
dataframe으로 json이용  (0) 2021.08.19