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

使用pandas实现DataFrame Lx列值匹配升序列表对应区间上限

实现方案

你可以直接用pandas内置的pd.cut分箱函数实现需求,不需要写循环遍历,代码如下:

import pandas as pd

if __name__ == "__main__":
    DataExample = [[0.6,  0.36 ,0.00],
                   [0.6,  0.36 ,0.00],
                   [0.9,  0.81 ,0.85],
                   [0.8,  0.64 ,0.91],
                   [1.0,  1.00 ,0.92],
                   [1.0,  1.00 ,0.95],
                   [0.9,  0.81 ,0.97],
                   [1.2,  1.44 ,0.97],
                   [1.0,  1.00 ,0.97],
                   [1.0,  1.00 ,0.99],
                   [1.2,  1.44 ,0.99],
                   [1.1,  1.21 ,0.99]]
            
    DataExample = pd.DataFrame(data = DataExample, columns = ['Lx', 'A', 'Ratio'])
    
    normalsizes = [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]

    # 核心逻辑:分箱取右边界
    DataExample['Lx'] = pd.cut(
        DataExample['Lx'],
        bins=normalsizes,
        labels=normalsizes[1:], # 每个区间对应右边界作为值
        right=False, # 区间为左闭右开,符合需求描述的区间规则
        include_lowest=True # 包含最小值边界
    ).astype(float)

    print(DataExample)

参数说明

  • bins:传入预先升序排列的区间边界列表normalsizes
  • labels:每个区间对应的输出值,这里直接取normalsizes从第二个元素开始的右边界
  • right=False:设置区间为左闭右开,例如[0, 0.75)、[0.75, 1),对应取右边界0.75、1作为结果
  • 最后转float是因为pd.cut默认返回分类类型,转数值型方便后续计算

注:你给出的最终结果示例中前两行Lx为1,和你描述的0.6取0.75的规则冲突,如果需要匹配你贴的结果,可将normalsizes中的0.75删除即可。

替代方案(numpy实现)

也可以用np.searchsorted直接定位索引取值,性能更高:

import numpy as np
DataExample['Lx'] = np.array(normalsizes)[np.searchsorted(normalsizes, DataExample['Lx'], side='right')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:04