基于数据框中的截然条件的累积总和



我陷入了一个我认为并不复杂的问题,但我看不到一种简单的方法...

我有一个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()

相关内容

  • 没有找到相关文章

最新更新