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

基于Pandas的DataFrame列按条件求和及英超球队赛季黄牌红牌统计方法问询

解决英超球队黄牌/红牌统计问题的简洁方法

嘿,我明白你的困扰——分开统计主客场的数据再相加确实麻烦,还容易出问题。咱们来用更优雅的方式搞定这个需求,顺便解答你关于“基于另一列值对两列求和”的疑问。


一、统计全赛季球队总黄牌/红牌数

你的核心问题是要把球队作为主、客队时的黄牌(红牌)数合并统计,之前的方法会因为索引不匹配或代码冗余出问题。我们可以把主客场的数据规整到同一结构后再合并计算:

1. 统计黄牌总数

import pandas as pd

# 提取主队黄牌数据并重命名列
home_yellow = df[["HomeTeam", "HY"]].rename(columns={"HomeTeam": "Team", "HY": "YellowCards"})
# 提取客队黄牌数据并重命名列
away_yellow = df[["AwayTeam", "AY"]].rename(columns={"AwayTeam": "Team", "AY": "YellowCards"})

# 合并主客队数据,统一统计
all_yellow = pd.concat([home_yellow, away_yellow], ignore_index=True)
# 按球队分组求和,降序排序
yellow_top_teams = all_yellow.groupby("Team")["YellowCards"].sum().sort_values(ascending=False)

2. 统计红牌总数

红牌的统计逻辑完全一致,假设红牌列是HR(主队红牌)和AR(客队红牌):

home_red = df[["HomeTeam", "HR"]].rename(columns={"HomeTeam": "Team", "HR": "RedCards"})
away_red = df[["AwayTeam", "AR"]].rename(columns={"AwayTeam": "Team", "AR": "RedCards"})

all_red = pd.concat([home_red, away_red], ignore_index=True)
red_top_teams = all_red.groupby("Team")["RedCards"].sum().sort_values(ascending=False)

这种方法的优势:

  • 避免了两个groupby结果相加时的索引不匹配问题
  • 代码更简洁易读,方便后续扩展(比如统计其他数据)

二、基于另一列的值对两列求和

你提到的“基于另一列的值对两列求和”,其实可以理解为根据某个条件,动态选择要相加的列。举个常见的场景:

场景1:每行中根据条件选择列赋值

比如,给每行添加一列,显示当前指定球队(比如主队)的单场黄牌数:

import numpy as np

# 假设我们要提取每行主队的黄牌数,也可以根据其他条件调整逻辑
df["CurrentTeamYellow"] = np.where(df["Role"] == "Home", df["HY"], df["AY"])

场景2:按分组条件合并两列数据

其实我们前面统计总黄牌数的方法就是这类需求的延伸:把主客场的球队和对应数据映射到同一列,本质就是基于“主客场”这个隐含条件,把HY和AY的值合并到YellowCards列中,再按球队分组求和——这也是处理这类“分角色统计”问题的通用思路。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 00:57:29