Python pandas与OR logi合并

2024-03-29 08:25:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在搜索,但没有找到这个问题的答案,你能用OR逻辑执行熊猫数据帧的合并吗?基本上,相当于使用“where t1.a=t2.a或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\u alias(list1)创建一个值列表,并根据list1中的df2.col1选择df2。这将为我提供所需的df2中的行,但这仍然不能使我将df1和df2合并到适当的行中。我想如果有一个OR merge选项,我可以单步执行并使其正常工作,但以下所有操作都抛出了一个语法错误:

^{pr2}$

以及

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的完全不同的方法的建议?在


Tags: or数据right数据库dfon情况alias
2条回答
#will this work?
df = pd.concat([df1.merge(df3, left_on='col1', right_on='col1', how='left'), df1.merge(df3, left_on='col1', right_on='col1_alias', how='left')]

我想我会做两个合并:

In [11]: df = pd.DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])

In [12]: df2 = pd.DataFrame([[1, 7], [2, 8], [4, 9]], columns=["C", "D"])

In [13]: res = df.merge(df2, left_on="B", right_on="C", how="left")

In [14]: res.update(df.merge(df2, left_on="A", right_on="C", how="left"))

In [15]: res
Out[15]:
   A  B    C    D
0  1  2  1.0  7.0
1  3  4  4.0  9.0
2  5  6  NaN  NaN

如您所见,这将选择A=1->;D=7,而不是B=2->;D=8。在

注意:为了获得更高的扩展性(匹配不同的列),可能需要拉出一个列,尽管在本例中它们都是相同的:

^{pr2}$

相关问题 更多 >