merge 함수는 뜻 그대로 합치다 라는 뜻인데, concat 함수와는 차이가 있다. concat 함수는 행과 열, 즉 index 기준으로 합치는것이고, merge는 엑셀의 vlookup처럼 같은 값는 열을 기준으로 열로 붙게 된다. 여기서 편한점은 엑셀의 vlookup은 순서가 중요하지만, merge는 동일한 열만 있으면 해당 열에 맞게 값이 붙게되므로 더 편리하다.
df1.merge(df2, how = "left")
(df1 = left / df2 =right , 즉 왼쪽 표에 왼쪽으로 붙으라는 뜻)
가격 정보를 담고 있는 df2는 제품값에 맞춰서 df1의 열로 붙게된다
df2를 자세히 보면 업체마다 제품 가격이 다르다. 즉, 제품 하나만 가지고 merge를 쓸수 없는 상황. 하지만 merge는 다중요건도 단일요건과 똑같은 코드로 작동한다. 두 데이터에 공통으로 들어가는 제품과 업체를 on=["업체","제품"] 조건으로 넣으면 되지만 알아서 해주기 떄문에 굳이 적을필요는 없다.
-df1.merge(df2, how = "outer")
name1 = ['송중기', '권보아', '김나현', '박효신', '진달래']
a1, a2, a3, a4, a5 = '송중기', '권보아', '김나현', '박효신', '진달래'
b1, b2, b3 = '카페라떼', '아이스티', '모카라떼'
c1, c2 = '콩다방', '별다방'
df1 = pd.DataFrame([name1, [b2, b1, b1, b2, b3]], index=["이름", "제품"]).T
df2 = pd.DataFrame([[b1, 4500], [b2, 4600], [b3, 4800]], columns=["제품", "가격"])
df3 = pd.DataFrame([name1,[c1, c1, c2, c1, c2], [b2, b1, b1, b2, b2]],
index=["이름", "업체", "제품"]).T
df4 = pd.DataFrame([[c1, b2, 4600], [c1, b1, 4700], [c2, b2, 4200], [c2, b1, 4300]],
columns=["업체", "제품", "가격"])
df5 = pd.DataFrame([[b1, 4500], [b2, 4600], [b3, 4800]], columns=["상품", "가격"])
df6 = pd.DataFrame([[b1, 4500], [b2, 4600], [b3, 4800], [b3, 4800]],
columns=["제품", "가격"])
df7 = pd.DataFrame([[a2, a3, a1, a5], [b2, b1, b1, b3]], index=["이름", "1일차"]).T
df8 = pd.DataFrame([[a2, a3, a4, a1], [b1, b3, b2, b2]], index=["이름", "2일차"]).T
df9 = pd.DataFrame([b1, b3, b2, b2], index=[a2, a3, a4, a1], columns=["2일차"])
df1 과 df2 병합하기
제품이름으로 병합할 수 없는 상황(업체마다 제품의 가격이 다르므로)
on부분은 생략가능하다