多对多加入行为

DBA108642

不太确定如何为这个问题加上标题,但这是实际情况。我有一个数据框(dfOrders),它具有order_id和基本信息,如下所示:

|order_id|full_name|order_date|billing|shipping|
------------------------------------------------
|1234567 |John Doe |1/1/2019  |Address|Address1|
|1234567 |John Doe |1/1/2019  |Address|Address2|

然后是第二个数据帧(dfStandardized),其中包含标准化的地址信息:

|order_id|latitude |longitude |shippingZip|...
-------------------------------------------
|1234567 |97.12345 |101.1245  |12345      |...
|1234567 |98.98765 |102.9876  |12389      |...

实质上,问题是一位客户下了一个订单,但又将其运送到两个单独的地址。因此,只有一个order_id,但是只有两行,每行都有一个送货地址。我想要的是一个这样的数据框:

|order_id|full_name|order_date|billing|shipping|latitude |longitude |shippingZip|...
---------------------------------------------------------------------------------
|1234567 |John Doe |1/1/2019  |Address|Address1|97.12345 |101.1245  |12345      |...
|1234567 |John Doe |1/1/2019  |Address|Address2|98.98765 |102.9876  |12389      |...

仅将额外的送货信息添加到具有相应正确地址的行中,但我得到的是:

|order_id|full_name|order_date|billing|shipping|latitude |longitude |shippingZip|...
---------------------------------------------------------------------------------
|1234567 |John Doe |1/1/2019  |Address|Address1|97.12345 |101.1245  |12345      |...
|1234567 |John Doe |1/1/2019  |Address|Address2|98.98765 |102.9876  |12389      |...
|1234567 |John Doe |1/1/2019  |Address|Address1|98.98765 |102.9876  |12389      |...
|1234567 |John Doe |1/1/2019  |Address|Address2|97.12345 |101.1245  |12345      |...

两个地址都收到两个地址的补充归属。显然这是因为由于只有一个order_id,所以它是多对多联接。有什么办法可以得到我想要的结果吗?这是我正在使用的代码:

import pandas as pd

df = dfOrders.merge(dfStandardized, on = 'order_id', how = 'inner')
贝尼

通常我们会 cumcount

dfOrders['New']=dfOrders.groupby('order_id').cumcount()
dfStandardized['New']=dfStandardized.groupby('order_id').cumcount()
out=dfOrders.merge(dfStandardized, on = ['order_id','new'], how = 'inner').drop('New',1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章