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

如何为DataFrame的filter10列每行匹配REF列最近值并计算差值

问题描述

我多次搜索都没找到解决方案,现有如下DataFrame:

filter10    REF
0   NaN         0.00
1   NaN         0.75
2   NaN         1.50
3   NaN         2.25
4   NaN         3.00
5   NaN         3.75
6   NaN         4.50
...
15  2.804688    11.25
16  3.021875    12.00
17  3.578125    12.75
18  3.779688    13.50
...
27  NaN         20.25
28  NaN         21.00
29  NaN         21.75
30  NaN         22.50
31  6.746875    NaN
32  NaN         NaN
...

需要新增一列df['DIFF'],遍历filter10列,当遇到非NaN数值时,找到REF列中最接近该数值的值,计算两者差值(filter10数值 - 最接近的REF值)并填入对应行;filter10为NaN时,DIFF也为NaN。

期望输出如下:

filter10    REF     DIFF
0   NaN         0.00    NaN
1   NaN         0.75    NaN
2   NaN         1.50    NaN
3   NaN         2.25    NaN
4   NaN         3.00    NaN
5   NaN         3.75    NaN
6   NaN         4.50    NaN
...
15  2.804688    11.25   -0.195312 # 2.804688 - 3 (REF中最接近的值) = -0.195312
16  3.021875    12.00   0.021875
17  3.578125    12.75   -0.171875
18  3.779688    13.50   0.029688
...
27  NaN         20.25   NaN
28  NaN         21.00   NaN
29  NaN         21.75   NaN
30  NaN         22.50   NaN
31  6.746875    NaN     -0.003125
32  NaN         NaN     NaN
...
解决方案

可以利用numpy的argmin快速定位最接近的值,代码实现如下:

import pandas as pd
import numpy as np

# 提取REF列中的有效数值(排除NaN)
ref_valid_values = df['REF'].dropna().values

def compute_diff(filter_val):
    if pd.isna(filter_val):
        return np.nan
    # 计算当前值与所有REF有效数值的绝对差,找到差值最小的索引
    closest_idx = np.argmin(np.abs(ref_valid_values - filter_val))
    closest_ref_val = ref_valid_values[closest_idx]
    # 返回filter10值与最接近REF值的差
    return filter_val - closest_ref_val

# 生成DIFF列
df['DIFF'] = df['filter10'].apply(compute_diff)

代码说明

  • ref_valid_values:提前提取REF列的非NaN值,避免计算时被干扰
  • compute_diff函数:判断当前filter10值是否为NaN,是则返回NaN;否则通过计算绝对差找到最接近的REF值,最终返回差值
  • apply方法:遍历filter10列的每个值,批量生成DIFF列的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:05:24