2013-12-04 6 views
36

У меня есть два dataframes со следующими именами столбцов:запрессовки панды dataframes по именам столбцов

frame_1: 
event_id, date, time, county_ID 

frame_2: 
countyid, state 

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

joined_dataframe 
event_id, date, time, county, state 

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

ответ

63

вы можете использовать left_on и right_on параметры следующим образом:

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

Я не был уверен, что от вопроса, если вы только хотели объединить, если ключ был в левой руке dataframe. Если это так, то следующее будет делать, что (выше будет фактически сделать многие ко многим слияния)

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

2

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

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

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

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

Смежные вопросы