python Pandas的内连接

ev7lccsx  于 2023-01-04  发布在  Python
关注(0)|答案(3)|浏览(117)

我有两个 Dataframe :

  • 第一个是从清单数据库中提取的,数据解释了价值、路由(源和目的地)以及实际的SLA
awb_number   route    value       sla_actual (days)
01           A - B    24,000          2
02           A - C    25,000          3
03           C - B    29,000          5
04           B - D    35,000          6
  • 第二个 Dataframe 解释了路由(起点和目的地)以及内部SLA(3PL SLA)。
route       sla_partner (days)
A - B           4
B - A           3
A - C           3
B - D           5

我想调查SLA实际值和第三方物流SLA之间的差距,所以我所做的是根据路由连接这两个 Dataframe 。
我猜想结果会是这样的:

awb_number    route    value      sla_actual     sla_partner
01            A - B    24,000         2             4
02            A - C    25,000         3             3
03            C - B    29,000         5             NaN
04            B - D    35,000         6             5

我所做的是:

df_sla_check = pd.merge(df_actual, df_sla_partner, on = ['route_city_lazada'], how = 'inner')

第一个 Dataframe 有36,000行,第二个 Dataframe 有20,000行,但是结果返回了700,000多行。我的逻辑有问题吗?它不应该返回大约20,000行-36,000行吗?
有人能告诉我怎么正确地做吗?
先谢谢你

tcomlyy6

tcomlyy61#

应用左外连接。我想它会解决这个问题。

oxcyiej7

oxcyiej72#

根据@boi-doingthings和@Peddi Santhoshkumar提出的观点,我还建议使用left连接器,例如以下用于数据集的连接器:

df_sla_check = pd.merge(df_actual, df_sla_partner, on=['route'], how='left')

对于您所显示的内容,'route'可能是您的列的适当名称。

w6mmgewl

w6mmgewl3#

请确认在on参数中传递的联接字段。此外,您还应检查联接发生的唯一键的数量。联接 Dataframe 中出现峰值的最自然原因是df1的一个记录Map到df2的多个记录,反之亦然。
df1.route.value_counts()
df2.route.value_counts()
另一种方法是将how参数更改为“left”。

相关问题