【发布时间】:2019-03-11 15:19:44
【问题描述】:
我确定这个问题是用另一种方式提出的,但我想确定这个问题的措辞与我的理解完全一致。我还在学习熊猫,所以请耐心等待。
我有 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 的 Merge 建议,我发现以下方法可以解决问题并将选项描述分配到 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", "Silver"]] dfA = pd.DataFrame(options, columns = ["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
【问题讨论】: