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

Pandas两个超2万行数据框按日期区间条件关联的高效方案咨询

高效实现方案

核心思路是用向量化操作+分组聚合替代逐行遍历,执行效率可以提升数十倍,两万行数据耗时基本在1秒内,具体实现步骤如下:

  1. 把两个表的日期字段统一转换为pandas datetime格式,避免字符串比较出错
  2. 提前筛选DF2中Delivered为True的记录,减少后续合并的数据量
  3. 按Number字段左连接两个表
  4. 向量化判断日期是否落在区间内,按DF1的原索引分组聚合判断是否存在符合条件的记录,映射为Yes/No即可
import pandas as pd

# 1. 统一转换日期格式
df1['From_Date'] = pd.to_datetime(df1['From_Date'])
df1['To_Date'] = pd.to_datetime(df1['To_Date'])
df2['Date'] = pd.to_datetime(df2['Date'])

# 2. 筛选DF2中投递成功的有效记录
df2_valid = df2[df2['Delivered'] == True].copy()

# 3. 按Number字段左连接两个表
merged = df1.reset_index().merge(df2_valid[['Number', 'Date']], on='Number', how='left')

# 4. 向量化判断日期是否在区间内,按原DF1索引聚合判断匹配结果
merged['is_match'] = merged['Date'].between(merged['From_Date'], merged['To_Date'])
match_result = merged.groupby('index')['is_match'].any().map({True: 'Yes', False: 'No'})

# 把结果赋值到DF1新增列
df1['Delivered'] = match_result

以上所有操作都是pandas底层C实现的向量化运算,没有Python层的循环开销,远快于apply或者手动遍历的方案,运行结果和你给出的预期输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 06:36:04