Как я могу объединить два фрейма данных и сохранить все ключевые столбцы в панд?

#python #pandas #dataframe

Вопрос:

Мне нужно внутреннее соединение 2 фреймов данных с использованием одного и того же ключа, я создал несколько временных фреймов данных при выполнении соединения, приведенный ниже код работает нормально, но мне интересно, есть ли способ сохранить оба столбца ключа соединения при соединении двух нижеприведенных фреймов данных pandas с помощью subj в качестве ключа.

 head = [['nationality', 'BART', 'USA']]
body = [['placeOfBirth', 'BART', 'NEWYORK'], ['hasFather', 'BART', 'HOMMER']]
head_df = pd.DataFrame(head, columns = ['pred', 'subj', 'obj'])
body_df = pd.DataFrame(body, columns = ['pred', 'subj', 'obj'])
joined_df = pd.merge(head_df, body1_df, how='inner' ,on='subj')
 

У меня есть эти два фрейма данных

head_df :

           pred  subj  obj
0  nationality  BART  USA
 

body_df :

            pred  subj      obj
0  placeOfBirth  BART  NEWYORK
1     hasFather  BART   HOMMER
 

Я хочу объединить(внутренний) эти 2 кадра данных на основе subj (head_df) и subj (body_df).

Мой желаемый результат таков

         pred_x subj_x obj_x        pred_y subj_y    obj_y
0  nationality   BART   USA  placeOfBirth   BART  NEWYORK
1  nationality   BART   USA     hasFather   BART   HOMMER
 

Спасибо

Комментарии:

1. Как использовать такие дублированные столбцы, если они обязательно будут иметь одинаковое содержимое ? Вы можете просто создать дубликат столбца и переименовать старые / новые столбцы в любом случае.

Ответ №1:

Если вы хотите добавить «_x» и «_y» к меткам столбцов, используйте suffixes .

joined_df = pd.merge(head_df, body_df, how='inner', on='subj', suffixes=['_x', '_y'])

В результате будет:

     pred_x  subj    obj_x   pred_y  obj_y
0   nationality BART    USA placeOfBirth    NEWYORK
1   nationality BART    USA hasFather   HOMMER
 

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

 joined_df = pd.merge(head_df, body_df, how='inner', on='subj', suffixes=['_x', '_y'])
joined_df.rename(columns={'subj':'subj_x'}, inplace=True)
joined_df['subj_y'] = joined_df['subj_x']
 

В результате будет:

     pred_x  subj_x  obj_x   pred_y  obj_y   subj_y
0   nationality BART    USA placeOfBirth    NEWYORK BART
1   nationality BART    USA hasFather   HOMMER  BART