【发布时间】:2018-02-02 19:47:06
【问题描述】:
假设我有两个数据框,两者的列名是:
table 1 columns:
[ShipNumber, TrackNumber, ShipDate, Quantity, Weight]
table 2 columns:
[ShipNumber, TrackNumber, AmountReceived]
我想根据 ShipNumber 和 TrackNumber 合并这两个表。 但是,如果我只是按以下方式使用合并(伪代码,而不是真实代码):
tab1.merge(tab2, "left", on=['ShipNumber','TrackNumber'])
那么,这意味着两个表中 ShipNumber 和 TrackNumber 列中的值必须匹配。
但是,在我的例子中,有时 ShipNumber 列的值会匹配,有时 TrackNumber 列的值会匹配; 只要两个值之一匹配一行,我希望合并发生。
也就是说,如果 tab 1 中的 row 1 ShipNumber 匹配 tab 2 中的 row 3 ShipNumber,但是两条记录的两个表中的 TrackNumber 不匹配,我仍然想匹配两个表中的两行。
所以基本上这是一个非此即彼的匹配条件(伪代码):
if tab1.ShipNumber == tab2.ShipNumber OR tab1.TrackNumber == tab2.TrackNumber:
then merge
我希望我的问题是有道理的... 非常感谢任何帮助!
按照建议,我查看了这篇文章: Python pandas merge with OR logic 但我认为这不是完全相同的问题,因为该帖子中的 OP 有一个映射文件,因此他们可以简单地进行 2 次合并来解决这个问题。但我没有映射文件,而是有两个具有相同键列的 df(ShipNumber、TrackNumber)
【问题讨论】:
-
你看到这个帖子了吗:stackoverflow.com/questions/43925603/…
-
其实那个帖子并没有解决这里的问题..
-
嗨@Vico 我编辑了我的帖子以包含您建议的帖子,但我认为该帖子没有回答我的问题:(
-
您的输出中总共需要四列吗? IE。
A_tab1,A_tab2,B_tab1,B_tab2?如果只有A或B需要在任何给定行上匹配,您似乎将需要所有这些。 -
无论如何,如果没有您的数据或预期的输出,就不能说更多。
标签: python pandas dataframe merge