Pandas无共同关联键时如何关联两表生成月度货品库存追踪表
Pandas无关联键两表全匹配生成库存明细宽表方案
需求本质
你需要实现的是两张表的笛卡尔积(全交叉连接),即货品表的每一行都和库存容量表的所有日期行一一配对,所有原有字段完整保留,刚好满足「每个货品对应全部月份的库存容量数据」的要求。
最优实现方案
Pandas 1.2.0及以上版本推荐直接用merge方法的原生交叉连接参数,代码最简洁、性能最优:
步骤1:构造示例测试数据(可跳过,直接替换为你自己的实际表)
import pandas as pd # 库存容量表示例 df_inventory = pd.DataFrame({ 'Date': ['2020-01', '2020-02', '2020-03'], 'Inventory Capacity': [1000, 1200, 900] }) # 货品信息表示例 df_item = pd.DataFrame({ 'Item id': ['A001', 'A002', 'A003'], 'amount': [100, 150, 80] })
步骤2:执行交叉连接生成宽表
# 一行代码完成笛卡尔积关联 df_final = df_item.merge(df_inventory, how='cross')
低版本Pandas兼容方案(1.2.0以下版本用)
如果你的Pandas版本不支持how='cross',可以通过临时添加共同关联键的方式实现,效果完全一致:
# 两张表都加同一个值的临时键,关联后删除即可 df_final = df_item.assign(tmp_key=0).merge(df_inventory.assign(tmp_key=0), on='tmp_key').drop('tmp_key', axis=1)
最终输出效果
生成的宽表共3个货品 × 3个月份 = 9行数据,所有字段完整保留:
| Item id | amount | Date | Inventory Capacity |
|---|---|---|---|
| A001 | 100 | 2020-01 | 1000 |
| A001 | 100 | 2020-02 | 1200 |
| A001 | 100 | 2020-03 | 900 |
| A002 | 150 | 2020-01 | 1000 |
| ... | ... | ... | ... |
后续可直接基于该表做月度货品库存占用、剩余容量等指标的计算。
内容的提问来源于stack exchange,提问作者Sam M
相关产品推荐
相关产品推荐

