数据帧中基于多重条件的累积总和

时间:2019-03-02 17:07:40

标签: python pandas dataframe cumulative-sum

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

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

代码有效,并且给了我一个团队的字典,所有进球(主场和客场)均获得进球。 我不知道这是否是最简单的方法,因为现在,我不知道如何使用以下季节的条件来求和:

  • np.add.accumulate()
  • np.cumsum()

然后如何将其正确添加到数据框中的正确位置?我想在循环过程中将索引添加到字典中,这样行得通吗?

非常感谢。

1 个答案:

答案 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()