我陷入了一个我认为并不复杂的问题,但我看不到一种简单的方法...
我有一个dataframe(stats_match),有11 000行:
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
我想累积地累计由团队/赛季和Ligue 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])
代码可以使用所有目标(在家和外出)的词典中,并给了我一个团队的词典。我不知道这是最简单的方法
- np.add.accumulate()
- np.cumsum()
,然后如何在我的数据框中正确的位置正确添加它?我想在循环期间将索引添加到我的字典中,可以工作吗?
非常感谢。
您可以在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()