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

如何在DataFrame中根据目标值获取对应无序列表的前后相邻数值?

实现逻辑

我们可以按以下步骤逐行处理数据:

  1. 对每行的UNORDERED_LIST做升序排序
  2. 判断目标值VALUE_TO_FIND是否在排序后的列表中:
    • 存在:前后相邻值都取目标值本身
    • 不存在:找到目标值的插入位置,取插入位置的前一个元素为PREVIOUS_VALUE,插入位置的当前元素为NEXT_VALUE

可直接运行的Python代码

import pandas as pd
import bisect

# 构造示例DataFrame
df = pd.DataFrame({
    'VALUE_TO_FIND': [5, 3, 2, 5, 4],
    'UNORDERED_LIST': [
        [0, 10],
        [1, 0, 10, 8, 4, 2],
        [9, 10, 0],
        [4, 8, 0, 1, 2, 10],
        [0, 10, 4]
    ]
})

def get_neighbors(row):
    target = row['VALUE_TO_FIND']
    sorted_list = sorted(row['UNORDERED_LIST'])
    # 目标值存在的情况
    if target in sorted_list:
        return pd.Series([target, target])
    # 不存在的情况用二分法找插入位置
    pos = bisect.bisect_left(sorted_list, target)
    prev = sorted_list[pos-1]
    next_val = sorted_list[pos]
    return pd.Series([prev, next_val])

# 新增两个结果字段
df[['PREVIOUS_VALUE', 'NEXT_VALUE']] = df.apply(get_neighbors, axis=1)

print(df)

输出结果

运行上述代码得到的结果和预期完全一致:

VALUE_TO_FINDUNORDERED_LISTPREVIOUS_VALUENEXT_VALUE
5[0, 10]010
3[1, 0, 10, 8, 4, 2]24
2[9, 10, 0]09
5[4, 8, 0, 1, 2, 10]48
4[0, 10, 4]44

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 07:06:04