我正在搜索,但没有找到这个问题的答案,你可以使用 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.col1 位于 df1.col1 中或 df3.col1_alias 位于 df1.col1 中的时间来创建 df3。然后,从 df3.col1 和 df3.col1_alias (list1) 创建单个值列表,并根据 list1 中的 df2.col1 选择 df2。这将为我提供所需的 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'))
and
df = df1.merge(df3, (left_on='col1', right_on='col1')|(left_on='col1', right_on='col1_alias'), how='left')
and
df = df1.merge(df3, left_on='col1', right_on='col1'|right_on='col1_alias', how='left')
以及其他几种变体。有关如何执行 OR 合并的任何指导,或关于使用 df3 中两列中的同义词合并 df1 和 df2 的完全不同方法的建议?