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

如何基于主客场排名差异使用多条件语句计算进球乘数?

解决方案:根据排名差异计算加权进球数

首先需要明确:你的需求描述和示例存在逻辑矛盾:

  • 需求中规定「己方排名高于对手时,进球数×0.45」
  • 但示例里,Ducks(主队,排名1)高于Frogs(客队,排名2),却要求执行「home_goals×0.15」

下面分两种情况给出实现方案:


情况1:严格遵循需求描述的规则

规则:

  • 己方排名低于对手(己方rank数字 > 对手rank数字):进球数×0.15
  • 双方排名持平:进球数×0.30
  • 己方排名高于对手(己方rank数字 < 对手rank数字):进球数×0.45

用Python Pandas批量处理示例数据的代码:

import pandas as pd
import numpy as np

# 构造示例数据
df = pd.DataFrame({
    'home_team': ['Ducks', 'Frogs', 'Eagles'],
    'away_team': ['Frogs', 'Eagles', 'Ducks'],
    'rank_home': [1, 3, 2],
    'rank_away': [2, 3, 1],
    'home_goals': [4, 6, 5],
    'away_goals': [1, 3, 5]
})

# 计算主队加权进球
df['weighted_home'] = np.select(
    [
        df['rank_home'] > df['rank_away'],  # 主队排名低于客队
        df['rank_home'] == df['rank_away'], # 排名持平
        df['rank_home'] < df['rank_away']   # 主队排名高于客队
    ],
    [
        df['home_goals'] * 0.15,
        df['home_goals'] * 0.30,
        df['home_goals'] * 0.45
    ]
)

# 计算客队加权进球
df['weighted_away'] = np.select(
    [
        df['rank_away'] > df['rank_home'],  # 客队排名低于主队
        df['rank_away'] == df['rank_home'], # 排名持平
        df['rank_away'] < df['rank_home']   # 客队排名高于主队
    ],
    [
        df['away_goals'] * 0.15,
        df['away_goals'] * 0.30,
        df['away_goals'] * 0.45
    ]
)

print(df)

运行结果中,索引0的Ducks加权进球为 4×0.45=1.8,符合需求描述的规则。


情况2:严格遵循示例的操作逻辑

规则(根据示例推导):

  • 己方排名高于对手(己方rank数字 < 对手rank数字):进球数×0.15
  • 双方排名持平:进球数×0.30
  • 己方排名低于对手(己方rank数字 > 对手rank数字):进球数×0.45

调整后的代码只需修改权重值的顺序:

import pandas as pd
import numpy as np

df = pd.DataFrame({
    'home_team': ['Ducks', 'Frogs', 'Eagles'],
    'away_team': ['Frogs', 'Eagles', 'Ducks'],
    'rank_home': [1, 3, 2],
    'rank_away': [2, 3, 1],
    'home_goals': [4, 6, 5],
    'away_goals': [1, 3, 5]
})

# 计算主队加权进球(匹配示例逻辑)
df['weighted_home'] = np.select(
    [
        df['rank_home'] < df['rank_away'],  # 主队排名高于客队
        df['rank_home'] == df['rank_away'], # 排名持平
        df['rank_home'] > df['rank_away']   # 主队排名低于客队
    ],
    [
        df['home_goals'] * 0.15,
        df['home_goals'] * 0.30,
        df['home_goals'] * 0.45
    ]
)

# 计算客队加权进球(匹配示例逻辑)
df['weighted_away'] = np.select(
    [
        df['rank_away'] < df['rank_home'],  # 客队排名高于主队
        df['rank_away'] == df['rank_home'], # 排名持平
        df['rank_away'] > df['rank_home']   # 客队排名低于主队
    ],
    [
        df['away_goals'] * 0.15,
        df['away_goals'] * 0.30,
        df['away_goals'] * 0.45
    ]
)

print(df)

运行结果中,索引0的Ducks加权进球为 4×0.15=0.6,完全匹配示例要求。


关于条件语句的说明

这里不需要使用and/or,因为三个条件是互斥且覆盖所有可能情况的,直接通过if-elif-else(单条数据处理)或np.select(批量数据处理)按顺序判断即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 03:15:48