在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]
核心逻辑
两种方法的本质都是:
- 计算
Home%、Draw%、Away%分别与BestOdds%的绝对差值 - 找出差值最小的那个百分比值,存入
ClosestMatch列
内容的提问来源于stack exchange,提问作者Paul Corcoran
相关产品推荐
相关产品推荐

