パンダのデータフレームを列名で結合する


84

次の列名を持つ2つのデータフレームがあります。

frame_1:
event_id, date, time, county_ID

frame_2:
countyid, state

(左)を結合して、次の列のデータフレームを取得したいと思いますcounty_ID = countyid

joined_dataframe
event_id, date, time, county, state

結合したい列がインデックスでない場合、その方法がわかりません。最も簡単な方法は何ですか?ありがとう!

回答:


157

次のように、left_onおよびright_onオプションを使用できます。

pd.merge(frame_1, frame_2, left_on='county_ID', right_on='countyid')

キーが左側のデータフレームにある場合にのみマージするかどうかは、質問からわかりませんでした。その場合、以下がそれを行います(上記は事実上多対多のマージを行います)

pd.merge(frame_1, frame_2, how='left', left_on='county_ID', right_on='countyid')

1
これを少し拡張するために、片側にインデックスを指定する場合は、を使用できますright_index=True
Druckles 2015

1
@Woodyframe_1すでにcounty_IDインデックスとしてframe_2持っcountyidていて、すでにインデックスとして持っている場合はどうなりますか?私はあなたの答えの代わりframe_1.reset_index()frame_1(そして同じようにframe_2)できることを理解しています。しかし、インデックスをリセットせずに参加/マージするためのより効率的な方法はありますか?
zhang18 2017年

3

county_ID正しいフレームのインデックスとして作成する必要があります。

frame_2.join ( frame_1.set_index( [ 'county_ID' ], verify_integrity=True ),
               on=[ 'countyid' ], how='left' )

参考までに、パンダでは、右フレームの結合列に一意でない値があると、左結合が中断されます。このバグを参照してください。

したがって、参加する前に整合性を確認する必要があります , verify_integrity=True

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.