如何在Pandas DataFrame中计算主队累计获胜数:关联历史客队数据
用Pandas实现累计获胜次数计算
首先构造你给出的初始DataFrame:
import pandas as pd data = { 'Home Team': ['BAR', 'RMD', 'MNU', 'CHE'], 'Away Team': ['MNU', 'BAR', 'CHE', 'RMD'], 'Home Team Home Wins': [4, 6, 2, 4], 'Away Team Away Wins': [3, 5, 3, 4] } df = pd.DataFrame(data)
不需要更换数据结构,用Pandas结合遍历就能实现你要的逻辑。核心思路是用一个字典记录每个球队最近一次作为客队时的客场获胜次数,逐行计算累计值:
# 初始化字典,存储各球队最新的客场获胜次数 last_away_wins = {} total_wins = [] for idx, row in df.iterrows(): home_team = row['Home Team'] # 计算当前主队累计获胜次数:有历史记录则相加,无则取当前主场获胜数 current_total = row['Home Team Home Wins'] + last_away_wins.get(home_team, 0) total_wins.append(current_total) # 更新字典,用当前客队的客场获胜数覆盖旧记录,保留最新值 last_away_wins[row['Away Team']] = row['Away Team Away Wins'] # 将计算结果添加为新列 df['Home Team Total Wins'] = total_wins
运行后得到的结果完全符合你的预期:
| Home Team | Away Team | Home Team Home Wins | Away Team Away Wins | Home Team Total Wins |
|---|---|---|---|---|
| BAR | MNU | 4 | 3 | 4 |
| RMD | BAR | 6 | 5 | 6 |
| MNU | CHE | 2 | 3 | 5 |
| CHE | RMD | 4 | 4 | 7 |
至于为什么df.apply不好用:apply的逐行处理是独立的,无法直接保留之前行的状态信息,而这里需要依赖历史记录更新当前值,所以用iterrows遍历+字典存状态的方式更直接高效。
内容的提问来源于stack exchange,提问作者Ev09
相关产品推荐
相关产品推荐

