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

如何按时间区间匹配两个DataFrame执行left join关联

Pandas 按时间区间匹配关联两个DataFrame实现

需求梳理

  • 维度表df1:存储分时段定价规则,包含Time Interval(时间区间)、Price(价格,单位:美元)两个字段,示例规则:
    • 10:00-11:00 对应价格15
    • 11:00-12:00 对应价格10
    • 15:00-16:00 对应价格18
  • 业务表df2:存储发车记录,包含Van(车辆编号)、Route(线路)、Departure Time(发车时间)三个字段,共4条记录
  • 关联规则:以df2为左表做左连接,判断每条记录的发车时间落在df1的哪个时间区间内,匹配对应时段价格,最终输出字段为Van、Route、Departure Time、Price

实现步骤

  • 统一时间格式:时间字段不能直接用字符串做区间判断,需要先转为pandas内置的datetime类型
  • 拆分时间区间:将df1中字符串格式的时间区间拆分为区间开始、结束两个时间点
  • 区间匹配:逐行判断发车时间所属的价格区间,绑定对应价格
  • 字段裁剪:输出要求的4个字段即可

完整可运行代码

import pandas as pd

# 构造df1时间区间定价表
df1 = pd.DataFrame({
    "Time Interval": ["10:00-11:00", "11:00-12:00", "15:00-16:00"],
    "Price": [15, 10, 18]
})
# 拆分时间区间为开始、结束时间,统一转为datetime格式
df1[["start_t", "end_t"]] = df1["Time Interval"].str.split("-", expand=True)
df1["start_t"] = pd.to_datetime(df1["start_t"], format="%H:%M")
df1["end_t"] = pd.to_datetime(df1["end_t"], format="%H:%M")

# 构造df2发车记录示例表
df2 = pd.DataFrame({
    "Van": ["Van001", "Van002", "Van003", "Van004"],
    "Route": ["RouteA", "RouteB", "RouteA", "RouteC"],
    "Departure Time": ["10:30", "11:15", "15:20", "12:30"]
})
# 发车时间转为datetime格式
df2["depart_t"] = pd.to_datetime(df2["Departure Time"], format="%H:%M")

# 定义区间价格匹配函数
def get_price(depart_time):
    # 区间采用左闭右开规则,避免边界时间重复匹配
    match_res = df1[(df1["start_t"] <= depart_time) & (df1["end_t"] > depart_time)]
    return match_res["Price"].iloc[0] if not match_res.empty else None

# 匹配价格
df2["Price"] = df2["depart_t"].apply(get_price)

# 输出最终结果
final_result = df2[["Van", "Route", "Departure Time", "Price"]]
print(final_result)

运行结果

VanRouteDeparture TimePrice
Van001RouteA10:3015.0
Van002RouteB11:1510.0
Van003RouteA15:2018.0
Van004RouteC12:30NaN

注意事项

  • 时间匹配前必须统一转为datetime类型,直接用字符串比较可能出现格式不兼容、大小判断错误的问题
  • 区间判断采用左闭右开规则[start, end),可以避免11:00、12:00这类整点边界时间同时命中两个区间的问题
  • 左连接逻辑下,没有匹配到任何定价区间的发车记录,Price字段会返回空值NaN,符合关联要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.09 16:15:43