Как присвоить значения строке на основе порядка списка

#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. Добро пожаловать