【发布时间】:2017-10-11 01:23:03
【问题描述】:
我正在搜索,但尚未找到此问题的答案,您能否使用 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'))
和
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 的完全不同方法的建议?
【问题讨论】:
标签: python pandas dataframe merge