본문 바로가기

BLOG/데이터분석

[데이터분석] 데이터프레임 : 칼럼이 일치하는 데이터프레임에 다른 칼럼 붙여 넣기 - merge

만약 두 데이터프레임 df1, df2가 있을 때, 두 데이터프레임에서 특정 칼럼이 동일하고, 그 칼람에 들어있는 데이터가 일치한다면, df1에는 없고 df2에는 있는 칼럼을 df1에 붙여넣으려면 어떻게 해야 할까요?

바로, merge() 함수를 이용해서 변경이 가능한데요, 아래 코드를 보면서 설명하도록 하겠습니다.

 

 

- merge() : 칼럼 비교 후 붙여 넣기

먼저, 아래와 같은 데이터프레임 df1과 df2가 있다고 가정해보겠습니다.

 

# <df1>
	item	price	count
0	water	1000	1
1	milk	2000	5
2	coffee	3000	2
3	ade	4000	1
4	juice	5000	3
5	tea	6000	2

# <df2>
	item	price	rating
0	water	1000	4.5
1	milk	2000	3.4
2	americano 3500	5.3
3	ade	4000	2.3
4	latte	4500	5.0
5	tea	6000	3.3

 

df1에는 'item', 'price', 'count' 칼럼이 있고, df2에는 'item', 'price', 'rating' 칼럼이 있습니다. 두 데이터프레임 모두 'item', 'price' 칼럼이 있지만 df2에 있는 2번째 행, 4번째 행에 있는 데이터는  df1에 없는 데이터를 가집니다.

 

이제 df1에는 없지만 df2에 있는 'rating' 칼럼을 'item', 'price' 칼럼이 동일하다면 'rating' 데이터를 df1에 추가하도록 merge() 함수를 사용해보겠습니다. 

 

df1['rating'] = df1.merge(df2,
                          left_on=["item","price"],  
                          right_on=["item","price"],
                          how="left")["rating"]

 

각 코드에 담긴 의미는 다음과 같습니다.

left_on=["item","price"]  df1의 'item', 'price' 칼럼과 

right_on=["item","price"]  : df2의 'item', 'price' 칼럼을 비교한 뒤 일치하면

how="left")["rating"]  :  'left'인 df1 로 df2의 'rating' 칼럼의 데이터를 추가하기

 

위 코드를 실행한 뒤, df1을 출력하면 아래와 같이 일치하는 행만 'rating' 값이 잘 붙여 넣어졌음을 확인할 수 있습니다.

 

	item	price	count	rating
0	water	1000	1	4.5
1	milk	2000	5	3.4
2	coffee	3000	2	NaN
3	ade	4000	1	2.3
4	juice	5000	3	NaN
5	tea	6000	2	3.3