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

求问:如何将Excel邻近值平均计算逻辑迁移至Pandas

在Pandas中基于数值邻近性计算平均值的解决方案

需求说明

针对DataFrame的Column A数值列,为每个数值计算所有与它差值绝对值≤2的数值的平均值,结果存入Column B,对应Excel公式:=AVERAGE(IF(INDEX(ABS($A$1:$A$5-TRANSPOSE($A$1:$A$5)),,ROW(B1))<2,$A$1:$A$5))。

方法1:使用apply遍历(适合小数据集)

通过自定义函数结合apply逐行处理每个元素,逻辑直观易懂:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({'A': [1, 3, 5, 7, 9]})

def calc_nearby_avg(current_val, full_series, threshold=2):
    # 筛选出与当前值差值绝对值≤阈值的元素
    valid_values = full_series[abs(full_series - current_val) <= threshold]
    return valid_values.mean()

# 生成Column B
df['B'] = df['A'].apply(calc_nearby_avg, full_series=df['A'])

方法2:广播矩阵计算(适合大数据集,效率更高)

利用NumPy广播特性生成差值矩阵,避免循环,大幅提升处理速度:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({'A': [1, 3, 5, 7, 9]})

# 生成所有元素间的差值绝对值矩阵
diff_array = abs(df['A'].to_numpy()[:, np.newaxis] - df['A'].to_numpy())
# 创建布尔掩码,标记符合条件的元素位置
mask = diff_array <= 2

# 计算每行的平均值:有效元素求和 / 有效元素数量
df['B'] = (df['A'].to_numpy() * mask).sum(axis=1) / mask.sum(axis=1)

验证结果

示例数据运行后,Column B结果为:[2.0, 3.0, 5.0, 7.0, 8.0],与Excel公式计算结果完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 03:32:42