如何根据trigger倍数匹配DataFrame中B列最近值对应的A列值?
解决方案
步骤1:构建示例DataFrame
先按照需求创建示例中的dfA:
import pandas as pd trigger = 100 # 生成足够覆盖3倍trigger的i范围 i_values = range(1, 81) dfA = pd.DataFrame({ 'A': [i * 10 for i in i_values], 'B': [i * 3.78 for i in i_values] })
步骤2:生成目标值列表
创建trigger的1、2、3倍目标值:
targets = [trigger * multiplier for multiplier in (1, 2, 3)]
步骤3:匹配最接近值并提取A列数据
遍历每个目标值,计算B列与目标值的绝对差,找到差值最小的行,再取出对应A列的值:
result = [] for target in targets: # 找到B列中与目标值最接近的行索引 closest_row_idx = (dfA['B'] - target).abs().idxmin() # 提取对应A列的值 result.append(dfA.loc[closest_row_idx, 'A']) print(result) # 输出: [260, 530, 790]
补充说明
- 如果B列存在多个与目标值差值相同的最小值,
idxmin()会返回第一个出现的行索引 - 若需要扩展到更多倍数(比如4倍、5倍),只需修改
targets列表中的乘数即可
内容的提问来源于stack exchange,提问作者JK2018
相关产品推荐
相关产品推荐

