You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas合并不同维度的SuperStoreUS Excel多工作表

解决SuperStoreUS多工作表合并问题

方法选择说明

首先明确三种方法的适用场景,你需要的是按指定字段关联不同结构的表,所以pd.merge是最优选择:

  • concat:仅适合结构高度相似的表(列名/索引一致)做行/列拼接,不适合你的跨表关联需求。
  • join:默认按索引关联表,灵活性不如merge(后者可直接指定关联列)。
  • merge:专为不同表通过指定键(如Region、OrderID)关联设计,完全匹配你的需求。

为什么how='right'会丢数据

right join以右表为基准保留行,如果你的右表是Users或Returns,会只保留右表存在的行,丢弃左表(Orders)中无匹配的行。要完整保留Orders的所有数据,必须用how='left'(以Orders为基准)。

完整合并代码

import pandas as pd

# 读取三个工作表
orders_df = pd.read_excel('SuperStoreUS.xlsx', sheet_name='Orders')
returns_df = pd.read_excel('SuperStoreUS.xlsx', sheet_name='Returns')
users_df = pd.read_excel('SuperStoreUS.xlsx', sheet_name='Users')

# 1. 关联Orders与Users:保留所有订单,匹配对应区域的经理信息
orders_with_manager = pd.merge(orders_df, users_df, on='Region', how='left')

# 2. 关联退货数据:保留所有订单,匹配对应订单的退货记录(无退货则字段为NaN)
final_merged_df = pd.merge(orders_with_manager, returns_df, on='OrderID', how='left')

# 验证数据完整性:合并后行数应与原Orders一致
print(f"原Orders行数:{len(orders_df)},合并后行数:{len(final_merged_df)}")

代码说明

  • 第一步left join保证所有订单数据不丢失,Users中的经理信息会自动匹配到对应Region的订单行;若Orders中存在Users未覆盖的Region(按你的描述应该不会),经理字段会填充为NaN,但订单数据仍保留。
  • 第二步left join将退货信息关联进来,有退货记录的行会填充退货字段,无退货的行对应字段为NaN,确保订单数据完整。

内容的提问来源于stack exchange,提问作者Aleksandra Milicevic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 05:20:41