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

如何用Polars筛选符合门店营业时间规则的交易记录?

高效实现交易记录筛选方案

核心思路

先关联门店营业时间与交易数据,标记每笔交易是否处于营业时段内;再通过分组判断每个供应商的每个产品是否存在至少一笔有效交易;最后保留这些符合条件的产品的所有交易记录。

具体实现步骤(以Pandas为例)

假设门店营业时间数据集为store_hours,交易数据集为transactions:

  1. 关联两个数据集
    通过供应商ID将交易数据与营业时间数据关联,只保留有营业时间记录的供应商交易:

    merged_df = transactions.merge(store_hours, left_on='vendor', right_on='vendorId', how='inner')
    
  2. 标记有效交易
    新增字段标记每笔交易是否在对应门店的营业区间内:

    merged_df['is_valid'] = (merged_df['saletime'] >= merged_df['opening time']) & (merged_df['saletime'] <= merged_df['closing time'])
    
  3. 筛选符合条件的供应商-产品组合
    按供应商+产品分组,判断每组是否存在至少一笔有效交易,得到需要保留的产品组合:

    valid_prod_pairs = merged_df.groupby(['vendor', 'prod'])['is_valid'].any().reset_index(name='keep')
    

    这里any()只要组内存在有效交易就返回True,代表该产品符合保留要求。

  4. 提取最终结果
    将原始交易数据与筛选后的产品组合关联,保留所有符合条件的交易:

    final_result = transactions.merge(valid_prod_pairs[valid_prod_pairs['keep']], on=['vendor', 'prod'], how='inner')
    final_result = final_result.drop(columns=['keep'])  # 移除多余标记列
    

效率优化说明

  • 全程采用Pandas向量化操作,避免逐行循环,大数据量下性能远高于循环逻辑;
  • merge与groupby均为Pandas底层优化的C实现操作,处理速度快;
  • 若数据量超大,可直接将逻辑迁移至Dask或PySpark实现分布式处理,核心逻辑保持一致。

样本数据验证结果

  • 供应商7744:产品11无有效交易,被剔除;产品12、13保留所有交易;
  • 供应商2378:产品20存在有效交易,保留该产品的所有交易(包括闭店后的那笔);
  • 供应商115:产品3无有效交易,被剔除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 23:41:59