如何优化Pandas统计足球球队胜场并保留DataFrame格式
优化足球赛事胜场统计的Pandas实现
需求背景
我正在处理一个包含数千场足球赛事结果的Pandas DataFrame,仅包含home_team、away_team、home_score、away_score列。需要统计胜场排名前15的球队,当前通过计算分差、标记比赛结果的方式统计胜场,代码比较繁琐,希望优化实现,同时保留结果为DataFrame格式方便用Seaborn分析。
原始数据代码
import pandas as pd data = [["Spain","England",3,2],["France","Germany",0,2],["Poland","Gambia",1,4],["England", "Spain",2,2],["France","England",1,0]] df = pd.DataFrame(data, columns = ["home_team","away_team","home_score","away_score"])
当前实现代码
scores['balance'] = scores['home_score'] - scores['away_score'] scores["result"] = scores["balance"].apply(lambda x: "Home wins" if x > 0 else "Away wins" if x < 0 else "Draw") # 统计主场胜场 scores_home = scores[scores["result"]=="Home wins"] victories_home = scores_home["home_team"].value_counts() # 统计客场胜场 scores_away = scores[scores["result"] == "Away wins"] victories_away = scores_away["away_team"].value_counts() total_vict = victories_home + victories_away top_15_total_vict = total_vict.sort_values(ascending=False).head(15) print(total_vict.sort_values(ascending=False).head(15)) print(scores.head())
优化后的实现代码
import pandas as pd # 加载原始数据 data = [["Spain","England",3,2],["France","Germany",0,2],["Poland","Gambia",1,4],["England", "Spain",2,2],["France","England",1,0]] df = pd.DataFrame(data, columns = ["home_team","away_team","home_score","away_score"]) # 分别筛选主客场获胜球队 home_winners = df.loc[df['home_score'] > df['away_score'], 'home_team'] away_winners = df.loc[df['away_score'] > df['home_score'], 'away_team'] # 合并数据并统计胜场 all_winners = pd.concat([home_winners, away_winners]) win_stats = all_winners.value_counts().reset_index() win_stats.columns = ['team', 'win_count'] # 获取胜场前15的球队 top_15_teams = win_stats.sort_values(by='win_count', ascending=False).head(15) print(top_15_teams)
优化亮点
- 简化逻辑:直接通过比分比较筛选获胜球队,省去计算分差、标记比赛结果的冗余步骤
- 代码精简:用
pd.concat合并主客场获胜序列,一次调用value_counts()完成统计 - 格式适配:通过
reset_index()将统计结果转为标准DataFrame,列名清晰,可直接用于Seaborn可视化分析
内容的提问来源于stack exchange,提问作者Manuel Veiga
相关产品推荐
相关产品推荐

