パンダ:複数の列の2つのデータフレームをマージ(結合)


168

2つの列を使用して2つのパンダデータフレームを結合しようとしています。

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文字列のリストではなく、リストのように見える文字列でなければなりません。
ルートは

回答:


311

これを試して

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またはleft_onのドキュメントごとのベクター/ベクターのリストで結合します


8
left_onright_onが同じab、である場合、使用できますon = ['a', 'b']か?
ahbon '13

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.