#python #pandas
#питон #панды
Вопрос:
Я уверен, что этот вопрос задавался другим способом, но я хочу быть уверен, что word этот сформулирован именно так, как я его понимаю. Я все еще изучаю pandas, так что потерпите меня.
У меня есть 3 фрейма данных, которые используют общий ключ. Мне нужно присвоить значения в столбцах фрейма данных A значениям фрейма данных B на основе ключевых значений фрейма данных C. Чтобы лучше проиллюстрировать это, вот мои примеры.
options= [["Option1", "Description1"], ["Option2", "Description2"], ["Option3", "Description3"]]
dfA = pd.DataFrame(options, columns = ["Option", "Description"])
links= [["Link1", "LinkDescription1"], ["Link2", "LinkDescription2"], ["Link3", "LinkDescription3"]]
dfB = pd.DataFrame(links, columns = ["Link", "LinkDescription"])
master_ledger = [["Option1", "Link1"], ["Option2", "Link2"], ["Option3", "Link3"]]
dfC = pd.DataFrame(master_ledger, columns = ["Option", "Link"])
Глядя на каждый из этих DF, мы видим:
dfA
Out[14]:
Option Description
0 Option1 Description1
1 Option2 Description2
2 Option3 Description3
dfB
Out[15]:
Link LinkDescription
0 Link1 LinkDescription1
1 Link2 LinkDescription2
2 Link3 LinkDescription3
dfC
Out[16]:
Option Link
0 Option1 Link1
1 Option2 Link2
2 Option3 Link3
Что я пытаюсь сделать, так это присвоить LinkDescription в DFB значениям из описаний опций в dfA, но на основе отношения опция / ссылка внутри dfC. Таким образом, с точки зрения псевдо, это может быть записано как:
dfB[«LinkDiscripiton»] = dfA[«Description»] -> где dfB[«LINK_ID»] == dfC[«LINK_ID»] и dfA[«OPT_ID»] == dfC[«OPT_ID»]
Ожидаемое изменение будет применено к dfB, и оно будет выглядеть следующим образом:
dfB
Out[15]:
Link LinkDescription
0 Link1 Description1
1 Link2 Description2
2 Link3 Description3
Я не совсем уверен, как подойти к этому, поэтому у меня нет примеров моих предыдущих подходов. Спасибо за помощь.
Обновить#
Благодаря предложению Yatu о слиянии я нашел следующее, чтобы выполнить трюк и назначить описания параметров в описаниях ссылок dfB:
df_temp = dfA.merge(dfC, on='Option')
df_temp.merge(dfB, on = 'Link')[['Link','Description']]
dfB[["Link", "LinkDescription"]] = df_temp[["Link", "Description"]]
dfB:
Out[63]:
Link LinkDescription
0 Link1 Description1
1 Link3 Description2
2 Link2 Description3
Также просто для лучшего объяснения желаемого результата. Если бы я определил dfA как:
параметры = [[«Вариант 1», «Бронза»], [«Вариант 2», «Золото»], [«Вариант 3», «Серебро»]]
dfA = pd.DataFrame(параметры, столбцы = [«Опция», «Описание»])
dfA
Out[68]:
Option Description
0 Option1 Bronze
1 Option2 Gold
2 Option3 Silver
Тогда dfB был бы изменен на:
Out[63]:
Link LinkDescription
0 Link1 Bronze
1 Link3 Gold
2 Link2 Silver
Ответ №1:
Вы можете использовать pd.merge
для объединения трех фреймов данных по их соответствующим ключам, а затем сохранить столбцы, принадлежащие dfB
:
df_temp = dfA.merge(dfC, on='Option').merge(dfB, on = 'Link')[['Link','Description']]
Link Description
0 Link1 Description1
1 Link2 Description2
2 Link3 Description3
Комментарии:
1. Хорошо, это то, что мне было нужно. Однако в моем случае произошло небольшое изменение. Мне нужно было обновить описания ссылок, чтобы они соответствовали описаниям опций. Поэтому вместо [[‘Link’, ‘LinkDescription’]] просто поместите ‘Description’ вместо ‘LinkDescripiton’. И происходит желаемый вывод. Спасибо за помощь.
2. Хорошо, обновил ответ @RockAndRoleCoder. Добро пожаловать