我正在搜索并没有找到这个问题的答案,您能否使用OR逻辑合并pandas数据框?基本上,相当于使用“where t1.A = t2.A OR t1.A = t2.B”进行SQL合并。
我遇到的情况是从一个数据库中提取信息到一个数据框(df1),然后需要将其与另一个数据库中的信息合并,该信息被提取到另一个数据框(df2)中,根据单个列(col1)进行合并。如果它们匹配时总是使用相同的值,那么这将非常简单。我遇到的情况是有时它们匹配,有时使用同义词。有第三个数据库有一个表,提供了此数据实体(col1和col1_alias)的同义词查找,可以将其提取到第三个数据框(df3)中。我要做的是合并我需要的df1和df2的列。
如上所述,在df1.col1和df2.col1匹配的情况下,这将起作用...
df = df1.merge(df2, on='col1', how='left')
然而,它们并不总是具有相同的值,有时会存在同义词。我考虑创建df3,基于当df3.col1在df1.col1中或者df3.col1_alias在df1.col1中时。然后,从df3.col1和df3.col1_alias(list1)中创建一个值的单一列表,并基于list1选择df2.col1。这将给我所需的来自df2的行,但仍无法使我处于合并df1和df2匹配相应行的位置。我认为如果有OR合并选项,我可以通过这个步骤并使其工作,但以下所有内容都会抛出语法错误:
df = df1.merge((df3, left_on='col1', right_on='col1', how='left')|(df3, left_on='col1', right_on='col1_alias', how='left'))
并且
df = df1.merge(df3, (left_on='col1', right_on='col1')|(left_on='col1', right_on='col1_alias'), how='left')
并且
df = df1.merge(df3, left_on='col1', right_on='col1'|right_on='col1_alias', how='left')
以及其他几种变化。如何执行OR合并的指导,或者对使用包含在df3中两列中的同义词完全不同的方法提出建议,以合并df1和df2?