티스토리 뷰

DataFrame의 결합 (Merge)

  • Database Table의 join 기능
  • 두 개의 DataFrame을 연결시켜서 새로운 DataFrame을 만든다.

학번을 기준으로 JOIN => 학번이 같은 것만 뽑혀서 나온다.

  1. INNER JOIN : INTERSECT
  2. FULL OUTER JOIN : UNION
  3. LEFT OUTER JOIN : (df1-df2) + INTERSECT
  4. RIGHT OUTER JOIN : (df2-df1) + INTERSECT

 

import numpy as np
import pandas as pd

data1 = {'학번': [1, 2, 3, 4],
         '이름': ['이지안', '박동훈', '이순신', '강감찬'],
         '학년': [2, 4, 1, 3]}

data2 = {'학번': [1, 2, 4, 5],
         '학과': ['CS', 'MATH', 'MATH', 'CS'],
         '학점' : [3.4, 2.9, 4.5, 1.2]}

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

#####INNER JOIN #############
result = pd.merge(df1, df2, on='학번', how='inner')
display(result)

INNER JOIN 결과

 

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

result = pd.merge(df1, df2, on='학번', how='left')
display(result)

result = pd.merge(df1, df2, on='학번', how='right')
display(result)

 

Merage - 여러가지 경우에 대한 사용법..

컬럼명이 다를 경우

 

# 만약 컬럼명이 다르다면
import numpy as np
import pandas as pd

data1 = {'학번': [1, 2, 3, 4],
         '이름': ['이지안', '박동훈', '이순신', '강감찬'],
         '학년': [2, 4, 1, 3]}
data2 = {'학생학번': [1, 2, 4, 5],
         '학과': ['CS', 'MATH', 'MATH', 'CS'],
         '학점' : [3.4, 2.9, 4.5, 1.2]}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)

display(df1)
display(df2)
################################

result = pd.merge(df1, df2,
                  left_on='학번', 
                  right_on='학생학번', how='inner')
display(result)

 

DataFrame의 column과 index를 이용한 range

 

import numpy as np
import pandas as pd

data1 = {'학번': [1, 2, 3, 4],
         '이름': ['이지안', '박동훈', '이순신', '강감찬'],
         '학년': [2, 4, 1, 3]}

data2 = {'학과': ['CS', 'MATH', 'MATH', 'CS'],
         '학점' : [3.4, 2.9, 4.5, 1.2]}

df1 = pd.DataFrame(data1)
display(df1)

# 학번을 index로 사용
df2 = pd.DataFrame(data2,
                  index=[1, 2, 4, 5])
display(df2) 
############################################

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

# result.loc[2] # 2번 X key error, 표기된 인덱스 기반
display(result.iloc[2]) # 숫자 인덱스 기반
display(result.loc[3])

 

# DataFrame의 index를 이용한 merge
import numpy as np
import pandas as pd

data1 = {
         '이름': ['이지안', '박동훈', '이순신', '강감찬'],
         '학년': [2, 4, 1, 3]}

data2 = {'학과': ['CS', 'MATH', 'MATH', 'CS'],
         '학점' : [3.4, 2.9, 4.5, 1.2]}

# 학번을 index로 사용.
df1 = pd.DataFrame(data1,
                  index=[1, 2, 3, 4])
df2 = pd.DataFrame(data2,
                  index=[1, 2, 4, 5])
display(df1)
display(df2) 

############################################

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

 

Concatenation (연결)

  • Series를 1차원, 2차원으로 연결하는 방법
  • Series는 1차원 vector 형태이다.
  • 연결하는 방법은 2가지 방법이 있다.
  • 행방향 연결, 열 방향 연결
# concatenation(연결)
import numpy as np
import pandas as pd

s1 = pd.Series([0, 1], index=['a', 'c'])
s2 = pd.Series([4, 3, 2], index=['b', 'c', 'e'])
s3 = pd.Series([5, 6], index=['f', 'g'])

print(s1)
print(s2)
print(s3)

# Series는 1차원 vector 형태이다.
# 연결하는 방법은 2가지 방법이 있다.
# 행방향 연결, 열 방향 연결

display(pd.concat([s1, s2, s3], axis=0)) # Series를 1차원으로 연결

display(pd.concat([s1, s2, s3], axis=1, sort=True))

 

DataFrame 연결

# DataFrame 연결
import numpy as np
import pandas as pd

df1 = pd.DataFrame(np.arange(6).reshape(3, 2),
                  index = ['a', 'b', 'c'],
                  columns = ['one', 'two'])
df2 = pd.DataFrame(5 + np.arange(4).reshape(2, 2),
                  index = ['a', 'b'],
                  columns = ['three', 'four'])
display(df1)
display(df2)
###################################################
# 인덱스 기준으로 붙는다.
# axis=1
result = pd.concat([df1, df2],
                    axis=1,
                    sort=True) # column 정렬
display(result)

 

# axis=0
# ignore_indes=False,  # 인덱스 다시 설정x
# sort=True => column 정렬
result = pd.concat([df1, df2],
                    axis=0,
                    ignore_index=False,  
                    sort=True)
display(result)

# axis=0
# ignore_indes=True,  # 인덱스 다시 정렬
# sort=True => column 정렬
result = pd.concat([df1, df2],
                    axis=0,
                    ignore_index=True,  
                    sort=True)
display(result)

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함