Python: как использовать слияние для выполнения объединения функций? - PullRequest
0 голосов
/ 26 октября 2018

У меня проблемы с выполнением объединения функций с помощью 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 и делать то же самое. Как я могу сделать это с помощью слияния?

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

1 Ответ

0 голосов
/ 26 октября 2018

Вы можете использовать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...