Об’єднання фреймів даних панд за іменами стовпців


85

У мене є два кадри даних із такими іменами стовпців:

frame_1:
event_id, date, time, county_ID

frame_2:
countyid, state

Я хотів би отримати фрейм даних із наступними стовпцями, приєднавшись (зліва) county_ID = countyid:

joined_dataframe
event_id, date, time, county, state

Я не можу зрозуміти, як це зробити, якщо стовпці, до яких я хочу приєднатися, не є індексом. Який найпростіший спосіб? Дякую!

Відповіді:


158

Ви можете використовувати параметри 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.