python daframe 간 join 시에 동일한 key값 말고, 포함관계인 key값을 매칭시킬 수 있을까요?
조회수 344회
python daframe 간 join 시에 동일한 key값 말고, 포함관계인 key값을 매칭시킬 수 있을까요?
예를 들어
A | B | C | D | E |
---|---|---|---|---|
ABC | 1 | 2 | 3 | 4 |
EFG | 5 | 6 | 7 | 8 |
HIJ | 9 | 10 | 11 | 12 |
DF_A가 있고
F | G | H | I | J |
---|---|---|---|---|
AB | 13 | 14 | 15 | 16 |
EF | 17 | 18 | 19 | 20 |
HI | 21 | 22 | 23 | 24 |
DF_B가 있습니다.
제가 원하는 건 A컬럼과 F컬럼을 기준으로 두 데이터프레임을 결합하는 것이며, 이때 A의 1열은 ABC, F의 1열은 BC이고, 이처럼 동일한 키값은 아니지만 포함관계로써 조건을 충족할 때 매칭되어 결합시키는 방법이 있을까요?
아래는 제가 원하는 형태의 데이터프레임입니다.
A | B | C | D | E | G | H | I | J |
---|---|---|---|---|---|---|---|---|
ABC | 1 | 2 | 3 | 4 | 13 | 14 | 15 | 16 |
EFG | 5 | 6 | 7 | 8 | 17 | 18 | 19 | 20 |
HIJ | 9 | 10 | 11 | 12 | 21 | 22 | 23 | 24 |
각각의 데이터프레임을 딕셔너리 형태로 변형하고, KEY의 포함정도를 통해 매칭시켜 데이터프레임을 결합해봤지만, 위의 컬럼명들은 모두 유지되지 않아서 앞서 말씀드린 방법을 시도해보고 있습니다.
혹시 제가 말씀드린 방법이 불가능하다면, 컬럼은 유지하되 컬럼값들 간의 포함관계를 기준으로 두 데이터 프레임을 결합하는 방법이 있을까요?
1 답변
-
https://towardsdatascience.com/joining-dataframes-by-substring-match-with-python-pandas-8fcde5b03933
pandas dataframe 의 join 이나 merge 에서 바로 지원하는 기능은 없는 것 같고요. 구글링을 조금 해 보니 위 문서가 나오네요. ( pandas join with key substring relation 이라고 검색했습니다. )
정확하게 질문자가 원하는 걸 해주는 코드입니다. 코드의 설명은 블로그포스팅을 쭉 읽어보시면 됩니다.
우선 두 df 의 cartesian product 로 (1) 모든 조합을 구하고, 모든 컬럼이 다 들어있는 전체df 에서 컬럼들의 (2) 관계를 만족하는지를 계산해서 match 컬럼을 하나 생성하고, (3) match 컬럼이 true 인 것들만 다시 필터링하는 방식입니다.
댓글 입력