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

如何使用Pandas实现精确匹配+近似匹配的Closest value join?

实现多条件匹配:精确匹配v1/v2 + 近似匹配v3

需求

我有两个数据表:

  • 左表:
    左表
  • 右表:
    右表

需要得到如下目标结果表:
目标结果表

实现逻辑:先对v1和v2做精确匹配,再对v3做近似匹配(取最接近的值),用Pandas的merge系列函数完成。

实现步骤&代码

  1. 先对两个表按v1、v2、v3排序——因为merge_asof要求用于近似匹配的列必须是有序的
  2. 使用merge_asof,通过by参数指定v1、v2做精确匹配,on参数指定v3做近似匹配,direction='nearest'确保取最接近的v3值
import pandas as pd

# 假设左表为df_left,右表为df_right
# 按分组键和近似匹配列排序
df_left_sorted = df_left.sort_values(['v1', 'v2', 'v3'])
df_right_sorted = df_right.sort_values(['v1', 'v2', 'v3'])

# 执行混合匹配
result_df = pd.merge_asof(
    df_left_sorted,
    df_right_sorted,
    by=['v1', 'v2'],  # 精确匹配的字段
    on='v3',          # 近似匹配的字段
    direction='nearest'  # 取最接近的值
)

# 调整列顺序以匹配目标表(可选)
result_df = result_df[['v1', 'v2', 'v3', 'v4']]

关键细节

  • merge_asof的by参数会强制精确匹配指定字段,保证只有同v1同v2的记录才会进入v3的近似匹配环节
  • 必须先对v3排序,否则merge_asof无法正确找到最接近的值
  • direction='nearest'是实现“匹配最接近值”的核心参数,其他可选值还有forward(取大于等于当前值的最小项)或backward(取小于等于当前值的最大项)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:30:51