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

如何基于区间条件合并两个DataFrame

区间匹配合并DataFrame解决方案

适用场景

你需要将带区间字段的表和带数值字段的表做关联,匹配数值落在区间范围内的对应行,以下是两种常用实现方案:

前置依赖

需要使用pandas库,确保已完成安装导入:

import pandas as pd

方案1:merge_asof实现(推荐,性能更高,适合大数据量)

要求区间表的起始字段预先排序,匹配效率远高于条件过滤

# 假设df1为区间表,字段为:区间起始start、区间结束end、其他自定义字段
# 假设df2为待匹配表,字段为:匹配值value、其他自定义字段
# 1. 对两个表的匹配字段排序
df1 = df1.sort_values('start').reset_index(drop=True)
df2 = df2.sort_values('value').reset_index(drop=True)

# 2. 按最近起始值匹配
merged_df = pd.merge_asof(df2, df1, left_on='value', right_on='start')

# 3. 过滤出数值落在区间范围内的有效行
# 如果你是左闭右开区间,把<=改成<即可
merged_df = merged_df[merged_df['value'] <= merged_df['end']]

方案2:笛卡尔积+条件过滤(逻辑直观,适合小数据量)

逻辑无需提前排序,代码好理解,但数据量超过1万行后性能会明显下降

# 加临时连接键生成笛卡尔积
df1['tmp_join_key'] = 1
df2['tmp_join_key'] = 1

# 全量关联后过滤符合区间条件的行
merged_df = df2.merge(df1, on='tmp_join_key').drop('tmp_join_key', axis=1)
merged_df = merged_df[(merged_df['value'] >= merged_df['start']) & (merged_df['value'] <= merged_df['end'])]

你只需要把示例代码里的字段名替换成你实际表的对应字段,即可得到符合要求的合并结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 21:45:04