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

Pandas中基于ID的±1范围匹配查找数据帧记录的实现方法

Pandas中基于ID的±1范围匹配查找数据帧记录的实现方法

嘿,我来帮你搞定这个需求!你想要的是根据df里的目标ID,找出df2中ID等于目标ID-1、目标ID本身、目标ID+1的所有记录对吧?下面我给你一步步演示怎么实现,完全贴合你的示例场景。

首先,先把你给出的示例数据明确下来(方便后续测试):

import pandas as pd

# 目标ID数据帧
df = pd.DataFrame([[99],[55],[117]],columns = ['Id'])

# 包含完整数据的参考数据帧
df2 = pd.DataFrame([[100,1,2,4,5,6,8],
                    [87,1,6,20,22,23,34],
                    [99,1,12,13,34,45,46],
                    [64,1,10,14,29,32,33],
                    [55,1,22,13,23,33,35],
                    [66,1,6,7,8,9,10],
                    [77,1,2,3,5,6,8],
                    [811,1,2,5,6,8,10],
                    [118,1,7,8,22,44,56],
                    [117,1,66,44,47,87,91]],
                   columns = ['Id', 'Num1','Num2','Num3','Num4','Num5','Num6'])

接下来咱们来实现核心逻辑:

  • 先提取df里的所有目标ID,为每个ID生成对应的±1范围的ID集合
  • 在df2中筛选出ID属于这个集合的所有记录
  • (可选)重置结果的索引,让输出更整洁

具体代码如下:

# 提取目标ID列表
target_ids = df['Id'].tolist()

# 生成需要匹配的ID范围:每个目标ID的-1、本身、+1,用集合去重避免重复筛选
match_ids = set()
for id_val in target_ids:
    match_ids.update([id_val - 1, id_val, id_val + 1])

# 在df2中筛选符合条件的记录,重置索引让结果更规整
results = df2[df2['Id'].isin(match_ids)].reset_index(drop=True)

# 查看最终结果
print(results)

运行这段代码后,就能精准得到你想要的——所有目标ID及其±1对应的df2记录啦!

备注:内容来源于stack exchange,提问作者user20250014

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:09:50