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

Pandas如何基于多列区间条件从另一DataFrame匹配获取对应值

Pandas 区间匹配填充安全库存实现方案

推荐实现方法(基于IntervalIndex,逻辑直观无额外依赖)

该方法直接利用pandas内置的区间索引能力匹配符合条件的安全库存规则,代码简洁且性能优于逐行遍历、笛卡尔积过滤等方案。

实现步骤:

  1. 为安全库存配置表创建区间索引,匹配要求的左闭右闭区间规则
  2. 用库存表的FirstSeenInStock直接匹配区间索引,取出对应的安全库存值回填
  3. 字段名无需手动映射,只要两表同平台字段命名一致即可直接赋值

完整可运行代码:

import pandas as pd
import numpy as np

# 原始数据
Stock = pd.DataFrame(data={
    'SKU': [1,2,3], 
    'PhysicalStock': [100,1,2], 
    'FirstSeenInStock': [2,5,200], 
    'SafetyStock_Platform1': [np.nan,np.nan,np.nan], 
    'SafetyStock_Platform2': [np.nan,np.nan,np.nan]
})

SafetyStock = pd.DataFrame(data={
    'FromAgeDays': [0,2,9], 
    'ToAgeDays': [3,10,999], 
    'SafetyStock_Platform1': [10,1,0], 
    'SafetyStock_Platform2': [5,3,0]
})

# 1. 创建区间索引,closed='both'表示同时满足 >=左端点 <=右端点
safety_intervals = pd.IntervalIndex.from_arrays(
    SafetyStock['FromAgeDays'], 
    SafetyStock['ToAgeDays'], 
    closed='both'
)
SafetyStock = SafetyStock.set_index(safety_intervals)

# 2. 匹配并回填安全库存
stock_age = Stock['FirstSeenInStock']
matched_safety = SafetyStock.loc[stock_age].reset_index(drop=True)
safety_cols = [col for col in SafetyStock.columns if col.startswith('SafetyStock_')]
Stock[safety_cols] = matched_safety[safety_cols]

# 输出结果和期望完全一致
print(Stock)

注意事项

  • 请提前确认安全库存配置表的区间没有逻辑冲突,若存在多个区间同时命中的情况,会优先取配置表中排在前面的规则
  • 如果存在FirstSeenInStock没有匹配到任何区间的情况,返回值会是NaN,建议增加校验逻辑处理这类异常值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:15:05