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

Pandas中如何基于df2的日期时间区间条件从df1匹配数据并计算均值

区间匹配聚合实现方案

针对带时间范围的逐行数据匹配、组内均值计算需求,可通过Pandas内置的向量化区间匹配能力实现,全程无需编写显式循环,运行效率远高于逐行筛选的方式。

前置数据格式校准

先统一两个DataFrame的时间列格式,避免格式不匹配导致的匹配失败:

  • 转换df1的逐小时时间列为标准datetime格式:
    df1['time'] = pd.to_datetime(df1['time'])
  • 转换df2的slot起止时间列为标准datetime格式:
    df2['slot_start'] = pd.to_datetime(df2['slot_start'])
    df2['slot_end'] = pd.to_datetime(df2['slot_end'])
    

构造可匹配的时间区间索引

将df2中每个slot的起止时间打包为左闭右闭的时间区间,完全匹配「起始日期 ≤ df1.time ≤ 结束日期」的筛选逻辑,注意这里必须指定区间为双闭,否则会遗漏slot起始时刻的观测数据:

slot_interval_index = pd.IntervalIndex.from_arrays(
    left=df2['slot_start'],
    right=df2['slot_end'],
    closed='both'
)

向量化匹配与均值计算

无需逐行遍历df2的slot做筛选,直接将df1的每条逐小时观测数据匹配到所属的slot区间,按区间分组计算波高均值:

# 按所属slot分组计算波高均值
slot_wave_avg = df1.groupby(
    pd.cut(x=df1['time'], bins=slot_interval_index)
)['wave_height'].mean()

结果回填到df2

上述计算得到的均值序列与df2的行顺序完全对齐,直接将值赋值为df2的新列即可:

df2['wave_height_avg'] = slot_wave_avg.values

注意事项:如果存在slot范围超出df1的时间覆盖区间、未匹配到有效观测的情况,对应位置会自动填充NaN,可根据实际需求选择是否过滤这类无效slot,或补充自定义填充规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.25 02:24:00