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

按与target列的接近程度排序Pandas DataFrame的value列

按与target列的接近程度排序Pandas DataFrame的value列

嘿,这个需求很常见,我来给你捋捋怎么实现!核心思路就是计算value和target两列的差值绝对值,然后按这个绝对值从小到大排序,这样就能让最接近target的value排在最前面啦。

首先,先把你的示例数据转换成可运行的Pandas DataFrame:

import pandas as pd

data = {
    'company': ['A', 'B', 'C', 'D', 'E', 'F'],
    'value': [23.18, 14.31, 26.08, 49.82, 37.38, 3.92],
    'target': [26.8879, 17.8298, 28.5479, 45.4238, 32.136, 11.7219]
}
df = pd.DataFrame(data)

接下来给你两种实用的排序方法:

方法1:用sort_values的key参数(推荐,Pandas 1.0及以上版本)

这种方法最简洁,不需要额外新增列,直接通过key函数计算每行的差值绝对值作为排序依据:

sorted_df = df.sort_values(by='value', key=lambda x: abs(x - df['target']))

这里的lambda函数会对value列的每个元素,计算它和对应行target值的绝对值差,然后Pandas会根据这个差值从小到大排序,完美匹配你的需求。

方法2:先计算差值列再排序(兼容旧版Pandas)

如果你用的是Pandas 1.0以下的版本,key参数还没支持,那就先新增一个差值列,排序后再删掉它就行:

# 新增绝对值差值列
df['abs_diff'] = abs(df['value'] - df['target'])
# 按差值列排序,然后删除临时列
sorted_df = df.sort_values('abs_diff').drop('abs_diff', axis=1)

最终排序结果

不管用哪种方法,你都会得到这样的排序结果(按与target的接近程度从高到低排列):

companyvaluetarget
C26.0828.5479
B14.3117.8298
A23.1826.8879
D49.8245.4238
E37.3832.136
F3.9211.7219

你可以核对每行的差值:C的差值仅为2.4679(最小),B的差值是3.5198,A是3.7079,完全符合按接近程度排序的要求。

备注:内容来源于stack exchange,提问作者Sergio Pantano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 10:34:31