如何根据lis的顺序为行赋值

2024-09-30 22:13:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我肯定这个问题是用另一种方式提出来的,但我想确定这个词的措辞和我的理解完全一致。我还在学熊猫呢,你放心吧

我有3个数据帧共享一个公共密钥。我需要根据dataframec的键值将dataframea列中的值赋给dataframeb的值。为了更好地说明这是我的例子

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

我要做的是将dfA中的选项描述中的值赋给DFB中的LinkDescription,但是基于dfC中的选项/链接关系。所以psuedo术语,可以写成:

dfB[“linkdescription”]=dfA[“Description”] -&燃气轮机;其中dfB[“LINK\u ID”]==dfC[“LINK\u ID”]和dfA[“OPT\u ID”]==dfC[“OPT\u 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

Tags: 选项linkdescriptionoutoptiondfaoption1option2
1条回答
网友
1楼 · 发布于 2024-09-30 22:13:31

您可以使用^{}将三个数据帧合并到它们相应的键上,然后保留属于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

相关问题 更多 >