我有两个数据帧,df1,df2,我想在其中连接两个不同的表名。但是,我得到的最终输出记录数呈指数级增长
数据
df1
site planq tr unit alias energy
ny q1 22 du1 du_cc 10
ny q1 22 du1 du_cc 10
ny q1 22 du1 du_cc 10
dc q2 22 aa1 aa_cc 8
dc q2 22 aa1 aa_cc 8
dc q2 22 aa1 aa_cc 8
dc q2 22 aa1 aa_cc 8
df2
serial sku type reason id
34444 d1 d ok ny
34444 d1 d ok ny
34444 d1 d ok ny
555 a1 a np dc
555 a1 a np dc
所需的
site planqtr unit alias energy serial sku type reason id
ny q1 22 du1 du_cc 10 34444 d1 d ok ny
ny q1 22 du1 du_cc 10 34444 d1 d ok ny
ny q1 22 du1 du_cc 10 34444 d1 d ok ny
dc q2 22 aa1 aa_cc 8 555 a1 a np dc
dc q2 22 aa1 aa_cc 8 555 a1 a np dc
dc q2 22 aa1 aa_cc 8 NaN NaN NaN NaN NaN
dc q2 22 aa1 aa_cc 8 NaN NaN NaN NaN NaN
做
join = pd.merge(df1, df2, how='left',left_on= ['id'], right_on = ['site'])
但是,我得到的最终输出记录数呈指数级增长。我不确定为什么输出显示数千行输出。如有任何建议,我们将不胜感激
更新:
我想你不清楚这个要求。我仔细查看了这些记录,联接无法提供所需的输出
不过,我可以使用concat帮助您获得所需的输出。但我不确定这是否符合你的主要目的。不管怎样,这是代码:
输出:
PS:忽略标题的间距
旧答案:
你需要做什么
left_on
参数对应于左侧的数据,反之亦然说明:
两者之间的区别在于
concat
只是将两个数据帧并排放置(如果传递axis=1
,而如果传递axis=0
,则将它们放在自上而下的位置),而merge
则完全不同合并就像笛卡尔积。仅当数据帧的两行之间存在连接点(基于您提供的
on
(left-on
,right-on
))时,它才会连接它们。如果有多个这样的连接点,会发生什么???输出“会爆炸”。例如,在您的案例中,站点列和“id”列中有多个“ny”。如果您加入,它实际做的是将每个“ny”连接到每个其他可能的“ny”,这样您总共有3x3=9行。请参见下面的合并输出:合并输出:
类似地,您可以看到,对于“dc”上的
merge
d行,总共有4x2=8个结果行。因此,它总共有17行,因此“爆炸”xD您在如何加入表格方面碰巧有一个小的输入错误。使用正确的联接索引尝试以下代码
相关问题 更多 >
编程相关推荐