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

Pandas嵌套循环失效:如何对比两个足球赔率DataFrame并替换低赔率?

解决方案

问题分析

你当前的多层嵌套循环逻辑混乱,既没有正确对应两个DataFrame的行(比赛)与列(赔率类型)的匹配关系,也没有利用pandas的向量化操作优势,导致无法实现“将较低赔率替换为较高赔率”的需求。核心问题是没有先对齐两个DataFrame的比赛条目,再对对应赔率列做逐元素的最大值替换。

实现步骤与代码

1. 导入依赖库

import pandas as pd
from fuzzywuzzy import process

2. 对齐两个DataFrame的比赛条目

假设两个DataFrame的索引是比赛名称,先为df1中的每个比赛找到df中相似度≥90的匹配项,建立映射关系:

# 为df1的每个比赛名称匹配df中最相似的条目(相似度>90)
match_map = {}
for game_name in df1.index:
    match, score = process.extractOne(game_name, df.index)
    if score > 90:
        match_map[game_name] = match

# 将df1按匹配关系对齐到df的行结构,只保留能匹配的行
df1_aligned = df1.loc[list(match_map.keys())].rename(index=match_map)

3. 对共同赔率列替换为较高值

找到两个DataFrame的共同列,然后逐列对对应行的赔率取最大值,替换回原DataFrame(这里以更新df为例,如需更新df1逻辑一致):

# 获取共同的赔率列
common_cols = [col for col in df.columns if col in df1_aligned.columns]

# 对每个共同列,将df中低于df1_aligned的赔率替换为较高值
for col in common_cols:
    df[col] = df[col].combine(df1_aligned[col], max, fill_value=df[col])

关键说明

  • 避免嵌套循环:pandas的combine方法可以直接对两个Series做逐元素的最大值计算,效率远高于手动循环。
  • 比赛匹配:用process.extractOne替代多层循环的行匹配,更简洁可靠,确保每个比赛只匹配到最相似的对应条目。
  • 对齐后操作:只有先将两个DataFrame的行(比赛)对齐,才能保证赔率替换是对应同一场比赛的。

内容的提问来源于stack exchange,提问作者nijhof.ngsvn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:59:59