【问题标题】:Cumulative sum based on mutiple condition in dataframe基于数据帧中多个条件的累积和
【发布时间】:2019-03-02 17:07:39
【问题描述】:

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

我有一个这样的数据框(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()

然后如何在我的数据框的正确位置正确添加它?我想在循环期间将索引添加到我的字典中,它可以工作吗?

非常感谢。

【问题讨论】:

    标签: python pandas dataframe cumulative-sum


    【解决方案1】:

    您可以在 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()
    

    【讨论】:

    • 确实是我打算做的,但是当我复制你的代码时它只返回两行......而不是 11000+
    猜你喜欢
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-23
    • 1970-01-01
    • 2019-05-05
    • 1970-01-01
    相关资源
    最近更新 更多