我有 csv 文件,其中包含来自不同足球比赛的大量结果。数据类似于下面的示例。该result
列可以包含 3 个可能的值:
H
-> 主队获胜(主队获得+3分)
A
-> 客队获胜(客场将获得 + 3 分)
D
-> 平局(两队均获得 +1 分)
HomeTeam AwayTeam Result
0 FC_Fake ABC_United H
1 Team_123 FC_Berlin A
2 FC_FAKE TEAM_123 D
我想更新文件,以便每一行都包含每支球队的总积分as they are at the start of the match(因此尚未更新该行本身的比赛结果)
我使用以下代码更新数据框,因此它包含points_[TEAM_NAME]每个团队的虚拟列。
# Teams is a python list I extracted earlier
for team in teams:
df['points_' + team] = 0
目标是转换数据帧,使上面的例子变成下面的例子。
(同样,分数应该代表比赛开始时的情况。所以即使FC_FAKE在第一行赢得比赛,Points_FC_FAKE列也是 0 )
HomeTeam | AwayTeam | Result Points_FC_FAKE | Points_TEAM_123 | Points_FC_Berlin | etc
-------------------------------------------------------------------------------
FC_Fake ABC_United H 0 0 0
Team_123 FC_Berlin A 3 0 0
FC_FAKE Team_123 D 3 0 3
我创建了以下 python 函数,如果它遍历数据帧中的所有行,则应解析结果并将正确的点数奖励给正确的团队。
def point_updater(x):
if x['Result'] == 'H':
home = x['HomeTeam']
x.shift(-1)['points_' + home] += 3
return x
elif x['Result'] == 'A':
away = x['AwayTeam']
x.shift(-1)['points_' + away] += 3
return x
elif x['Result'] == 'D':
home = x['AwayTeam']
away = x['AwayTeam']
x.shift(-1)['points_' + home] += 1
x.shift(-1)['points_' + away] += 1
return x
问题是当我将此函数应用于数据帧时,点不会改变(全部保持为 0)
df = df.apply(point_counter, axis=1)
df['points_FC_Fake'].value_counts()
----
0 2691
有谁知道我做错了什么?
千巷猫影
慕的地8271018
慕妹3242003
相关分类