我陷入了一个问题,我认为这并不复杂,但是我看不到简单的方法...
我有一个具有11000行的数据框(stats_match):
domicile exterieur season home away
FC Metz Stade Rennais FC 1999 0.0 0.0
Paris Saint-Germain ESTAC Troyes 1999 1.0 0.0
Olympique Lyonnais Montpellier Hérault SC 1999 1.0 2.0
Girondins de Bordeaux SC Bastia 1999 3.0 2.0
RC Strasbourg Alsace RC Lens 1999 1.0 0.0
AS Monaco AS Saint-Etienne 1999 2.0 2.0
我想对每个赛季(仅对联赛1)的实际球队得分的进球数进行累加(因为我预测从实际赛季中删除没有球队的行)。球队数据存储在另一个数据框(stade)中,如下所示:
equipe stade capacity
Angers SCO Stade Raymond Kopa 17048
Nîmes Olympique Stade des Costières 18364
Girondins de Bordeaux Matmut Atlantique 42115
Girondins de Bordeaux Stade Chaban-Delmas 33290
RC Strasbourg Alsace Stade de la Meinau 26109
LOSC Stade Pierre Mauroy 25000
我尝试过:
d = defaultdict(list)
for index, row in stats_match.iterrows():
if ((row.domicile in list(stade.equipe)) & (row.exterieur in list(stade.equipe))):
d[row.domicile].append([row.saison,row.but_domicile])
d[row.exterieur].append([row.saison,row.but_exterieur])
elif (row.domicile in list(stade.equipe)):
d[row.domicile].append([row.saison,row.but_domicile])
else:
d[row.exterieur].append([row.saison,row.but_exterieur])
代码有效,并且给了我一个团队的字典,所有进球(主场和客场)均获得进球。 我不知道这是否是最简单的方法,因为现在,我不知道如何使用以下季节的条件来求和:
然后如何将其正确添加到数据框中的正确位置?我想在循环过程中将索引添加到字典中,这样行得通吗?
非常感谢。
答案 0 :(得分:0)
您可以在pandas
中本地执行此操作。
首先,如果我对您的理解正确,则只希望stade
中的团队:
filtered_stats_match = stats_match[stats_match[['domicile', 'exterieur']].isin(stade['equipe']).any(axis=1)]
此后,您只需执行groupby
即可获得累计金额:
filtered_stats_match.groupby(['domicile', 'season'])[['home', 'away']].cumsum()