我有两个 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行吗?
有人能告诉我怎么正确地做吗?
先谢谢你
3条答案
按热度按时间tcomlyy61#
应用左外连接。我想它会解决这个问题。
oxcyiej72#
根据@boi-doingthings和@Peddi Santhoshkumar提出的观点,我还建议使用
left
连接器,例如以下用于数据集的连接器:对于您所显示的内容,
'route'
可能是您的列的适当名称。w6mmgewl3#
请确认在
on
参数中传递的联接字段。此外,您还应检查联接发生的唯一键的数量。联接 Dataframe 中出现峰值的最自然原因是df1
的一个记录Map到df2
的多个记录,反之亦然。df1.route.value_counts()
df2.route.value_counts()
另一种方法是将
how
参数更改为“left”。