如何计算DataFrame中各球队的主场胜率与客场胜率?
计算各球队主场与客场胜率
初始化DataFrame
import pandas as pd df = pd.DataFrame({ "homeTeam": ["B","C","A","A","B","C","A","A"], "AwayTeam": ["A","A","C","B","A","A","C","B"], "homeTeam Score": [3,5,0,2,0,4,0,0], "AwayTeam Score": [1,3,1,1,1,3,1,1] })
原始数据
| homeTeam | AwayTeam | homeTeam Score | AwayTeam Score |
|---|---|---|---|
| B | A | 3 | 1 |
| C | A | 5 | 3 |
| A | C | 0 | 1 |
| A | B | 2 | 1 |
| B | A | 0 | 1 |
| C | A | 4 | 3 |
| A | C | 0 | 1 |
| A | B | 0 | 1 |
需求
计算各球队的主场胜率与客场胜率,结果格式如下:
| Team | Home win rate | away win rate |
|---|---|---|
| B | 50% | 0% |
| C | 100% | 100% |
| A | 25% | 25% |
解决方案
# 标记主场胜场:主队得分高于客队则为胜 df['home_win'] = df['homeTeam Score'] > df['AwayTeam Score'] # 标记客场胜场:客队得分高于主队则为胜 df['away_win'] = df['AwayTeam Score'] > df['homeTeam Score'] # 统计各球队主场总场次、胜场数,计算胜率 home_stats = df.groupby('homeTeam')['home_win'].agg(['count', 'sum']) home_stats['Home win rate'] = (home_stats['sum'] / home_stats['count'] * 100).astype(str) + '%' # 统计各球队客场总场次、胜场数,计算胜率 away_stats = df.groupby('AwayTeam')['away_win'].agg(['count', 'sum']) away_stats['away win rate'] = (away_stats['sum'] / away_stats['count'] * 100).astype(str) + '%' # 合并主客场胜率数据,对齐球队名称 result = pd.concat([home_stats['Home win rate'], away_stats['away win rate']], axis=1).reset_index() result.rename(columns={'index': 'Team'}, inplace=True) # 按示例顺序排序 result = result.set_index('Team').loc[['B', 'C', 'A']].reset_index() print(result)
输出结果
运行代码后得到的结果如下:
| Team | Home win rate | away win rate |
|---|---|---|
| B | 50% | 0% |
| C | 100% | 100% |
| A | 25% | 25% |
内容的提问来源于stack exchange,提问作者TAEWENDY
相关产品推荐
相关产品推荐

