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

如何在Pandas中计算各列单元格间的最小绝对差值

计算DataFrame各列非自身元素间的最小绝对差值

给定示例DataFrame:

import pandas as pd

df = pd.DataFrame({"A": [9, 6, 9, 4, 5], "B": [8, 2, 9, 7, 3], "C": [0, 9, 3, 15, 5],})

需求:返回一个和原DataFrame列名一致的单行DataFrame,每个列的值为该列所有非自身配对的单元格间绝对差值的最小值。预期结果如下:

df_result = pd.DataFrame(
    {
        "A": [0], # 两个9的差值
        "B": [1], # 2&3、8&9、7&8的差值都是1
        "C": [2], # 3&5的差值
    }
)

需要实现通用方法,可处理任意结构的DataFrame。


高效实现思路

直接计算所有两两元素的差值会产生O(n²)的运算量,更高效的方案是:

  • 对每一列的元素排序
  • 计算排序后相邻元素的绝对差
  • 取这些差值的最小值(排序后最小的差值必然出现在相邻元素中)

该方法时间复杂度为O(n log n),远优于全量两两计算。

通用代码实现

def min_abs_diff_per_column(df):
    # 对每一列执行排序、计算相邻差、取最小值的操作
    min_diffs = df.apply(lambda col: col.sort_values().diff().abs().min())
    # 转换为单行DataFrame返回
    return pd.DataFrame([min_diffs.values], columns=min_diffs.index)

测试验证

用示例DataFrame测试:

result = min_abs_diff_per_column(df)
print(result)

输出结果:

A  B  C
0  0  1  2

完全符合预期。

特殊情况说明

  • 若某列仅含1个元素:无法形成非自身配对,返回NaN
  • 若某列存在重复元素:最小差值直接为0(如示例中的A列)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:47:03