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

Pandas DataFrame列值替换:将Lx列数值替换为steps列表中最接近的值

实现方案

直接借助numpy的定位和向量运算即可高效实现需求,核心逻辑是先定位每个Lx在有序steps中的相邻区间,再对比距离选择更近的边界值,完整可运行代码如下:

import pandas as pd
import numpy as np

if __name__ == "__main__":
    Dataex = [[0.6,  0.36],
               [0.6,  0.36],
               [0.9,  0.81],
               [0.8,  0.64],
               [1.0,  1.00],
               [1.0,  1.00],
               [0.9,  0.81],
               [1.2,  1.44],
               [1.0,  1.00],
               [1.0,  1.00],
               [1.2,  1.44],
               [1.1,  1.21]]
    Dataex = pd.DataFrame(data = Dataex, columns = ['Lx', 'A'])
    steps = [0, 0.75, 1, 1.25, 1.5, 1.75 ,2, 2.25, 2.4, 2.5, 2.75, 3, 
                   3.25, 3.5, 3.75, 4, 4.25, 4.5, 4.75, 5, 5.25, 5.5, 5.75, 6]
    
    # 核心实现逻辑
    steps_arr = np.array(steps)
    # 定位插入位置
    idx = np.searchsorted(steps_arr, Dataex['Lx'])
    # 裁剪索引避免越界
    idx = np.clip(idx, 1, len(steps_arr)-1)
    # 取左右两个边界值
    left_bound = steps_arr[idx-1]
    right_bound = steps_arr[idx]
    # 对比距离选择更近的边界
    Dataex['Lx_new'] = np.where(Dataex['Lx'] - left_bound < right_bound - Dataex['Lx'], left_bound, right_bound)
    
    # 输出结果
    print(Dataex)

结果验证

运行上述代码后输出的DataFrame和你给出的期望结果完全一致:

Lx     A  Lx_new
0   0.6  0.36    0.75
1   0.6  0.36    0.75
2   0.9  0.81    1.00
3   0.8  0.64    0.75
4   1.0  1.00    1.00
5   1.0  1.00    1.00
6   0.9  0.81    1.00
7   1.2  1.44    1.25
8   1.0  1.00    1.00
9   1.0  1.00    1.00
10  1.2  1.44    1.25
11  1.1  1.21    1.00

逻辑说明

  • 如果Lx本身就存在于steps中,那么np.searchsorted返回的位置对应的左右边界其中一个就是Lx本身,差值为0,会直接保留原值,符合规则1
  • 区间内的值会自动对比和左右边界的距离,返回更近的那个,符合规则2
  • 若遇到Lx和两个边界距离完全相等的情况,上述代码会默认选择右边界,你可以根据需要调整np.where的判断条件(比如改成小于等于就选左边界)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 14:06:03