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)
方法一:拆分主客场数据后合并求和
这种方法逻辑直观,适合新手理解:
- 分别提取主场球队+得分、客场球队+得分的子DataFrame,并重命名列名统一格式
- 合并两个子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
相关产品推荐
相关产品推荐

