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

在Pandas中匹配与BestOdds%最接近的Home%/Draw%/Away%值

给Pandas数据框新增ClosestMatch列(匹配与BestOdds%差值最小的百分比)

假设你的足球赔率数据已存入名为df的Pandas数据框,包含Home%、Draw%、Away%和BestOdds%列,以下是两种实现ClosestMatch列的方法:

方法一:逐行处理(适合小数据集)

import pandas as pd
import numpy as np

def get_closest_value(row):
    # 提取需要对比的三个百分比列
    target_values = row[['Home%', 'Draw%', 'Away%']]
    # 计算每个值与BestOdds%的绝对差值
    differences = np.abs(target_values - row['BestOdds%'])
    # 返回差值最小的对应值
    return target_values[differences.idxmin()]

# 新增ClosestMatch列
df['ClosestMatch'] = df.apply(get_closest_value, axis=1)

方法二:向量化运算(适合大数据集,效率更高)

如果数据集行数较多,推荐使用numpy矩阵运算避免逐行循环的性能损耗:

import pandas as pd
import numpy as np

# 定义需要对比的列名
compare_cols = ['Home%', 'Draw%', 'Away%']

# 构建差值矩阵:每行是三个列与BestOdds%的绝对差值
diff_matrix = np.abs(df[compare_cols].values - df['BestOdds%'].values.reshape(-1, 1))
# 找到每行差值最小的列索引
min_col_indices = np.argmin(diff_matrix, axis=1)
# 根据索引提取对应的值,赋值给新列
df['ClosestMatch'] = df[compare_cols].values[np.arange(len(df)), min_col_indices]

核心逻辑

两种方法的本质都是:

  1. 计算Home%、Draw%、Away%分别与BestOdds%的绝对差值
  2. 找出差值最小的那个百分比值,存入ClosestMatch列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 18:50:26