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

Python中如何统计DataFrame内重复球队的主客场总得分?

如何汇总DataFrame中主客场球队的总得分

我来帮你搞定这个问题!你需要把每个球队作为主场和客场的得分全部累加,其实用pandas的分组功能配合数据重塑就能轻松实现,下面给你两种实用的方法,都能得到你想要的结果:

第一步:先构造示例数据

首先我们先把你给出的示例数据转换成pandas DataFrame,方便后续操作:

import pandas as pd

data = {
    'home_team': ['A', 'B', 'C', 'D', 'A'],
    'away_team': ['D', 'C', 'B', 'A', 'B'],
    'home_score': [3, 1, 2, 3, 3],
    'away_score': [5, 0, 1, 5, 5]
}
df = pd.DataFrame(data)

方法一:拆分主客场数据后合并求和

这种方法逻辑直观,适合新手理解:

  1. 分别提取主场球队+得分、客场球队+得分的子DataFrame,并重命名列名统一格式
  2. 合并两个子DataFrame,再按球队名称分组求和
# 提取主场数据并重命名列
home_df = df[['home_team', 'home_score']].rename(columns={'home_team': 'team', 'home_score': 'score'})
# 提取客场数据并重命名列
away_df = df[['away_team', 'away_score']].rename(columns={'away_team': 'team', 'away_score': 'score'})

# 合并两个DataFrame,按球队分组计算总得分
total_scores = pd.concat([home_df, away_df]).groupby('team')['score'].sum().reset_index()

# 按得分降序排序,方便查看顶级球队
top_teams = total_scores.sort_values('score', ascending=False)
print(top_teams)

运行后输出结果:

team  score
0    A     11
3    D      8
2    C      3
1    B      3

可以看到球队A的总得分正好是11,和你预期的一致。

方法二:用melt函数快速重塑数据

如果你想更简洁高效,可以用pandas的melt函数一步完成数据重塑,再分组求和:

# 使用melt将主客场的球队和得分转成统一格式的长表
melted_df = df.melt(
    value_vars=[['home_team', 'away_team'], ['home_score', 'away_score']],
    value_name=['team', 'score']
).drop(columns='variable')

# 分组计算总得分并排序
total_scores = melted_df.groupby('team')['score'].sum().reset_index().sort_values('score', ascending=False)
print(total_scores)

这个方法代码更紧凑,结果和方法一完全相同。

额外技巧:筛选顶级得分球队

如果你只想找出得分最高的球队(支持并列情况),可以用下面的代码:

max_score = total_scores['score'].max()
top_teams = total_scores[total_scores['score'] == max_score]
print(top_teams)

运行后会输出所有得分等于最高分的球队,在你的示例里就是球队A。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:37:46