能否给个生鲜案例
生鲜平台退款匹配案例:
数据场景:
-
同一店铺同时段有两笔退款:
- 退款A:10:00,金额50元,商品:冰鲜三文鱼(批次20250301)
- 退款B:10:01,金额50元,商品:冷冻虾仁(批次20250302)
-
订单池(含批次号):
- 订单1:10:00,金额50元,三文鱼(批次20250301)
- 订单2:10:01,金额50元,虾仁(批次20250302)
原始模糊匹配问题:
若仅按金额+时间匹配,A可能误匹配到订单2(同一店铺+相同金额+相近时间)。
修正后代码:
# 提取批次号(假设格式:三文鱼_20250301 → 20250301)
df_refund['批次'] = df_refund['商品名'].str.extract(r'(d{8})')
df_orders['批次'] = df_orders['商品名'].str.extract(r'(d{8})')
# 按金额+商品品类+批次三级匹配
merged = pd.merge_asof(
df_refund.sort_values('时间'),
df_orders.sort_values('时间'),
on='时间',
by=['金额', '商品品类', '批次'], # 精确匹配三文鱼 vs 虾仁
tolerance='5min'
)
# 输出匹配结果验证
print(merged[['退款单号', '订单号', '金额', '商品品类_x', '批次_x', '匹配状态']])
预期输出:
| 退款单号 | 订单号 | 金额 | 商品品类 | 批次 | 匹配状态 |
|---|---|---|---|---|---|
| R-三文鱼 | ORD-三文鱼 | 50 | 三文鱼 | 20250301 | ✅ 精确匹配 |
| R-虾仁 | ORD-虾仁 | 50 | 虾仁 | 20250302 | ✅ 精确匹配 |