能否给个生鲜案例

生鲜平台退款匹配案例:

数据场景:

  • 同一店铺同时段有两笔退款:

    • 退款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 ✅ 精确匹配