Объединение фреймов данных pandas по именам столбцов

91

У меня есть два фрейма данных со следующими именами столбцов:

frame_1:
event_id, date, time, county_ID

frame_2:
countyid, state

Я хотел бы получить фрейм данных со следующими столбцами, присоединившись (слева) к county_ID = countyid:

joined_dataframe
event_id, date, time, county, state

Я не могу понять, как это сделать, если столбцы, к которым я хочу присоединиться, не являются индексом. Какой самый простой способ? Благодаря!

Алексис Эггермонт
источник

Ответы:

164

вы можете использовать параметры 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
1
@Woody Что делать , если frame_1уже есть county_IDв индексе, и frame_2уже в countyidкачестве индекса? Я понимаю , что можно заменить frame_1.reset_index()на frame_1(и то же самое для frame_2) в своем ответе. Но есть ли более эффективный способ присоединения / слияния без сброса индекса?
Zhang18
3

вам нужно сделать county_IDиндекс для правого фрейма:

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

для вашей информации, в пандах левое соединение прерывается, когда правый фрейм имеет неуникальные значения в столбце соединения. увидеть эту ошибку .

поэтому вам необходимо проверить целостность, прежде чем присоединиться , verify_integrity=True

behzad.nouri
источник