繁体   English   中英

内部加盟pandas

[英]Inner join in pandas

我有两个数据框:

  • 第一个是从清单数据库中提取的。数据解释了价值、路线(起点和终点)以及实际的 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 实际和 3PL SLA 之间的差距,所以我要做的是根据路线加入这两个数据帧。

我以为结果会是这样的:

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 行吗?

有人可以帮我如何正确地做到这一点吗?

先感谢您

应用左外连接。 我认为它会解决问题。

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

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

对于您所展示的内容, 'route'可能是您专栏的合适名称。

请确认参数中传入的on字段。 此外,您应该检查发生连接的唯一键的数量。 加入的 dataframe 中峰值的最自然原因是df1的一个记录被映射到df2的多个记录,反之亦然。

df1.route.value_counts()
df2.route.value_counts()

另一种方法是将how参数更改为“left”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM