Pandas中Inner Join结果行数异常问题求助
问题分析与解决方法
为什么会出现行数暴增?
你用inner连接得到70万+行,核心原因是关联键(route_city_lazada)在两个DataFrame中存在重复值,触发了笛卡尔积匹配:比如df_actual中某条路线出现N次,df_sla_partner中同一路线出现M次,merge后会生成N*M行对应该路线,最终总行数远超预期。
另外你代码里的关联键是route_city_lazada,但描述里的字段是route,这里大概率是笔误,要确保两个DataFrame的关联键名称一致。
正确实现步骤
1. 先处理df_sla_partner的重复值
因为每条路线应该对应唯一的3PL SLA,先对df_sla_partner去重,保留每个route的唯一SLA记录:
# 按route去重,保留第一条有效记录(也可根据业务逻辑选最后一条或其他规则) df_sla_partner_unique = df_sla_partner.drop_duplicates(subset=['route'], keep='first')
2. 使用左连接替代内连接
你的预期结果需要保留df_actual中所有运单,无匹配路线的显示NaN,所以用how='left'的左连接:
# 确保关联键名称一致,若两个DataFrame的键名不同,用left_on/right_on指定 df_sla_check = pd.merge(df_actual, df_sla_partner_unique, on=['route'], how='left')
3. 验证结果
可以通过以下代码检查是否符合预期:
# 查看结果行数,应该和df_actual的36000行一致 print(df_sla_check.shape[0]) # 查看无匹配的route记录 print(df_sla_check[df_sla_check['sla_partner (days)'].isna()])
内容的提问来源于stack exchange,提问作者yangyang
相关产品推荐
相关产品推荐

