如何根据多列上的 OR 条件合并两个数据框?

Mat*_*rna 5 python merge pandas

从这个问题出发,我试图匹配两个 Pandas 数据帧。

匹配条件为:

(left['to_match'] == right['first']) | (left['to_match'] == right['second'])
Run Code Online (Sandbox Code Playgroud)

或者,换句话说,左侧数据帧中要匹配的列应等于右侧数据帧中的第一列或第二列 - 因此是 OR 条件。

我可以使用和输入列表来解决问题,pd.merge例如

left.merge(right, left_on=['to_match', 'to_match'], right_on=['first', 'second'])
Run Code Online (Sandbox Code Playgroud)

但反过来,当两列匹配时,这只会给我 AND 条件结果。也就是说, 中的两列right具有相同的值。

这是输入数据的示例

左边

    to_match
0   TCNU4843483
1   MA18219
2   MA81192
3   MFREIGHT
Run Code Online (Sandbox Code Playgroud)

正确的

    first       second
0   ASDREF      TCNU4843483
1   MA18219     Null
2   Null        Null
3   HROB789     NESU6748392
Run Code Online (Sandbox Code Playgroud)

和这个预期的输出

    to_match          first       second
0   TCNU4843483       ASDREF      TCNU4843483   
1   MA18219           MA18219     Null
2   MA81192           Null        Null
3   MFREIGHT          Null        Null
4   Null              HROB789     NESU6748392
Run Code Online (Sandbox Code Playgroud)

知道 Pandas 是否支持这个,或者我必须编写自己的函数吗?

Rei*_*ldN -1

没有 SQL 并不是完成这项工作的最佳工具。SQL 很适合提取数据,就这样!

我相信您的 OR 条件不起作用,因为您正在使用 () 关闭操作

尝试:

(left['to_match'] == right['first'] | left['to_match'] == right['second'])
Run Code Online (Sandbox Code Playgroud)