我确定已经以另一种方式提出了这个问题,但是我想确保此词的措词完全符合我的理解。我还在学习熊猫,所以请耐心等待。

我有3个共享相同密钥的数据框。我需要基于数据帧C的键值将数据帧A的列中的值分配给数据帧B的值。为更好地说明,这里是我的示例。

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


我正在尝试做的是在DFB中为LinkDescription的dfA中的选项描述分配值,但要基于dfC中的选项/链接关系。所以伪术语,可以写成:

dfB [“ LinkDiscripiton”] = dfA [“描述”]
->其中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定义为:
    options = [[“ Option1”,“ Bronze”],[“ Option2”,“ Gold”],[“ Option3”,“银”]
    dfA = pd.DataFrame(选项,列= [“ Option”,“ Description”])

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

最佳答案

您可以使用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

关于python - 如何根据列表顺序为行分配值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55105098/

10-12 17:48