Python: как использовать слияние для объединения функций?

У меня проблемы с объединением функций с помощью pandas.merge.

У меня есть фрейм данных:

id_A id_B t
  1    2  1
  2    3  0
  3    4  1
...

И еще один фрейм данных, похожий на:

id f1 f2 f3
 1  1  2  3
 2  4  5  6
 3  7  8  9
 4  8  7  6
 5  5  4  3
...

Я хотел бы использовать pandas.merge или join для создания вывода, который будет выглядеть следующим образом:

id_A id_B f1_A f2_A f3_A f1_B f2_B f3_B t
  1    2    1    2    3    4    5    6  1
  2    3    4    5    6    7    8    9  0
  3    4    7    8    9    8    7    6  1
...

По сути, это похоже на вставку 3 столбцов значения f из dataframe_2 (на основе предоставленных id_A и id_B) в dataframe_1 между id_B и t. Но я не смог этого сделать, прочитав тонны документов.

Проблема, с которой я столкнулся, заключалась в том, как использовать слияние для выполнения этого поведения «вставки»? И как можно слить, если имена столбцов в dataframe_1 и 2 разные?

И, наконец, насколько я понимаю, вам в основном нужно «искать» id_A в dataframe_2 и добавлять его f1 ~ f3 в dataframe_1, а затем «искать» id_B и делать то же самое. Как я могу сделать это с помощью слияния?

Извините за мой английский, также я вроде как новичок в программировании, любая помощь будет очень признательна!

Похоже, вам следует объединить команды в цепочку. Сделай один, сделай второй.

Anton vBR 26.10.2018 08:16
2
1
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы можете использовать double merge с add_suffix, а затем объединить вывод с помощью concat:

a = df1[['id_A']].merge(df2.set_index('id').add_suffix('_A'),left_on='id_A', right_index=True)
b = df1[['id_B']].merge(df2.set_index('id').add_suffix('_B'),left_on='id_B', right_index=True)

cols = df1.columns.difference(['id_A','id_B'])
df = pd.concat([a,b, df1[cols]], axis=1)
print (df)
   id_A  f1_A  f2_A  f3_A  id_B  f1_B  f2_B  f3_B  t
0     1     1     2     3     2     4     5     6  1
1     2     4     5     6     3     7     8     9  0
2     3     7     8     9     4     8     7     6  1

Спасибо за помощь! Однако после того, как я попытался запустить предоставленный вами код, я получил сообщение об ошибке "KeyError:" ['id_A'] not in index "». Вы знаете, что может вызвать эту ошибку? Спасибо!

Metalhead Prime 26.10.2018 10:12

@MetalheadPrime - KeyError означает, что имя столбца отсутствует id_A, вы можете проверить имена столбцов с помощью print (df.columns)

jezrael 26.10.2018 10:13

Другие вопросы по теме