[Pandas] 데이터프레임을 병합하는 다양한 방법들(1) how: outer, inner, left, right (밥먹고 마저쓴다)
매번 봐도봐도 헷갈리는 데이터프레임(이하 df)을 합치는 방법들!
이것과 떨어질 수 없는 것들이 바로 pandas 의 concat, join, merge 함수들인데요, 이들은 다음에 더 자세히 보고(제가 집중을 잘 못해서^^...) 오늘은 merge 함수를 기준으로 how에 들어가는 방법들을 정리해보겠습니다.
저도 공부중이기도 하고, 자주 쓰이는 함수들이기에 복습하는 겸 적어보았습니다. 글을 읽어보시고 알고계시는 다른 방법이나, 더 나은 점이 있다면 댓글로 알려주세요!
outer, inner, left, right
pandas의 df를 합치는 함수들을 사용하다보면, 항상 언급되는 인자가 바로 how 입니다. how인자로는 "outer", "inner", "left", "right" 등의 인자값이 들어가는데요. 이들의 차이를 먼저 알고 가면 좋을 것 같습니다. 먼저 집합으로 이해해봅시다!
Inner Join in Pandas: A와 B의 교집합
Full(Outer) Join in Pandas: A와 B의 합집합
Left Join in Pandas: A
Right Join in Pandas: B
요기까진 이해가 되는데, 백문이불여일견이라고, 이해가 더욱 잘 갈 수 있도록, 다음파트에서 예시와 함께 확인해볼게요!
백마디보다 한 번 보는 예시가 와따!
대학교 수업시간입니다. 자유롭게 선택해서 듣기 때문에 수업내에 있는 학생들이 다르겠죠? 예시로, 작물대 농학과 학생들의 성적표를 한곳에 모아서 보고 싶다고 해봅시다. 먼저 아래는 학생들이 각자 들은 수업의 개별 성적표입니다.
A = pd.DataFrame(
{"학생":["김감자", "강고구마", "남옥수수", "최구황", "한작물", "글쓴이"],
"국어학점":["A+", "A", "B+", "B", "F", "A+"]}
)
B = pd.DataFrame(
{"학생":["김감자", "강고구마", "남옥수수", "최구황", "한작물", "박토마토", "윤야채"],
"영어학점":["B+", "B", "A+", "A", "F", "D", "F"]}
)
자. 이제 두 수업 모두 들은 학생들의 국어학점과 영어학점을 모아서 보고 싶습니다. 여기는 쉽죠?
pd.merge(A, B, how='inner')
그럼 이제 모든 학생들의 성적입니다. 해당 과목의 성적이 없는 경우에는 NaN으로 표시되네요!
left는 국어 수업을 들은 학생들의 모든 과목의 성적! 이라고 생각하시면 됩니다.
그렇다면 right는 집합 B, 그러니까 영어수업을 들은 학생의 모든 성적이라고 보면 되겠죠?
띠용? 간단하네~
그럼 살을 하나씩 더 붙여보아요~
아 배고파서 저녁만 먹고 와서 마저 이어서 쓸게용
참고링크