팬더 : 여러 열의 두 데이터 프레임을 병합 (결합)


169

두 개의 열을 사용하여 두 개의 팬더 데이터 프레임을 결합하려고합니다.

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

그러나 다음과 같은 오류가 발생했습니다.

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4164)()

pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4028)()

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13166)()

pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13120)()

KeyError: '[B_1, c2]'

이 작업을 수행하는 올바른 방법은 무엇입니까? 감사!


52
left_on그리고 right_on문자열 문자열 목록이 아니라해야하는 목록처럼 보인다.
root

답변:


312

이 시도

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.merge.html

left_on : 레이블 또는 목록 또는 왼쪽 DataFrame에서 결합 할 배열과 같은 필드 이름입니다. 열 대신 결합 키로 특정 벡터를 사용하기 위해 DataFrame 길이의 벡터 또는 벡터 목록 일 수 있습니다.

right_on : left_on 문서 당 오른쪽 DataFrame 또는 벡터 / 벡터 목록에서 결합 할 레이블 또는 목록 또는 배열과 같은 필드 이름


8
경우 left_onright_on동일 a하고 b, 우리가 사용할 수 있습니다 on = ['a', 'b']?
ahbon December

4
예, 완벽하게 유효합니다.
user3065757

4

여기서 문제는 아포스트로피를 사용하여 실제로 @Shijo가 문서에서 언급했듯이 함수가 레이블이나 목록을 기대하지만 문자열은 아닌 문자열로 전달되는 값을 설정한다는 것입니다! 목록에 왼쪽 및 오른쪽 데이터 프레임 모두에 전달되는 각 열 이름이 포함 된 경우 각 열 이름 개별적으로 아포스트로피 내에 있어야합니다 . 언급 된 내용을 통해 이것이 왜 잘못되었는지 이해할 수 있습니다.

new_df = pd.merge(A_df, B_df,  how='left', left_on='[A_c1,c2]', right_on = '[B_c1,c2]')

그리고 이것은 함수를 사용하는 올바른 방법입니다.

new_df = pd.merge(A_df, B_df,  how='left', left_on=['A_c1','c2'], right_on = ['B_c1','c2'])

3

이를 수행하는 다른 방법 : new_df = A_df.merge(B_df, left_on=['A_c1','c2'], right_on = ['B_c1','c2'], how='left')

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.