Суммарная сумма, основанная на множественном условии в кадре данных - PullRequest
0 голосов
/ 02 марта 2019

Я застрял в проблеме, которая, на мой взгляд, не сложна, но я не вижу простого пути ...

У меня есть такой фрейм данных (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     

Я хотел бы сделать кумулятивную сумму количества голов, забитых командами / сезоном, и только для реальных команд Лиги 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 голосов
/ 03 марта 2019

Вы можете сделать это изначально в 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()
...