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

如何在Pandas中为DataFrame值匹配最接近的上下限对应列

高效实现:为DataFrame每个值匹配最接近的上下限列名

数据定义

import pandas as pd
import numpy as np

df2 = pd.DataFrame({
    5000: [1000,1500,2000,2500,3000,3500,4000,5000],
    10000: [1000,2000,3000,5000,7500,8500,95000,10000],
    100000: [1000,2000,5000,10000,20000,50000,75000,100000]
})
df1 = pd.DataFrame({'value': [2000,45000,4000,20000]})

需求说明

针对df1中的每个value值,在df2的列名中找到:

  • 最接近且小于该值的列名(若不存在则为NaN)
  • 最接近且大于该值的列名(若不存在则为NaN)

高效实现方案

利用numpy的向量化搜索操作,避免逐行循环,大幅提升处理效率:

# 提取并排序df2的列名(确保逻辑通用性,即使列名无序也能正常工作)
cols = np.sort(df2.columns.values)

# 用searchsorted快速定位每个value在列名数组中的插入位置
positions = np.searchsorted(cols, df1['value'], side='left')

# 根据位置生成上下限结果
df1['closest_lower'] = np.where(positions == 0, np.nan, cols[positions - 1])
df1['closest_upper'] = np.where(positions == len(cols), np.nan, cols[positions])

输出结果

执行后df1的内容如下:

valueclosest_lowerclosest_upper
02000NaN5000
14500010000100000
24000NaN5000
32000010000100000

方案优势

使用numpy的向量化操作替代Python循环,在处理大规模数据时性能提升明显,同时代码简洁易维护,逻辑通用(无需依赖列名的初始排序)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 10:20:25