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
相关产品推荐
相关产品推荐

