itsource

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

mycopycode 2023. 2. 6. 23:30
반응형

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

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

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]'

이 일을 하는 올바른 방법이 무엇인지 아십니까?감사합니다!

이거 드셔보세요

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 : 오른쪽 DataFrame 또는 벡터/list per left_on docs에 가입하는 라벨 또는 목록과 같은 필드 이름

여기서의 문제는 아포스트로피를 사용함으로써 전달되는 값을 문자열로 설정하는 것입니다.사실 @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'])

또 다른 방법은 다음과 같습니다.

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

다음과 같이 짧고 알기 쉬운 것을 사용할 수 있습니다.

merged_data= df1.merge(df2, on=["column1","column2"])

언급URL : https://stackoverflow.com/questions/41815079/pandas-merge-join-two-data-frames-on-multiple-columns

반응형