In [1]:
import pandas as pd
import csv
pd.options.display.max_columns = 50

In [2]:
partidas = pd.read_csv("../2017/partidas.csv")

In [3]:
partidas = partidas[partidas["rodada_id"] <= 17]

In [4]:
partidas


Out[4]:
rodada_id clube_casa_id clube_visitante_id clube_casa_posicao clube_visitante_posicao aproveitamento_mandante aproveitamento_visitante placar_oficial_mandante placar_oficial_visitante partida_data local valida
0 1 266 277 6 14 v d 3.0 2.0 2017-05-14 11:00:00 Maracanã True
1 1 262 282 8 10 e e 1.0 1.0 2017-05-13 16:00:00 Maracanã True
2 1 275 267 2 19 v d 4.0 0.0 2017-05-14 16:00:00 Arena Palmeiras True
3 1 264 315 9 11 e e 1.0 1.0 2017-05-13 19:00:00 Arena Corinthians True
4 1 283 276 7 15 v d 1.0 0.0 2017-05-14 16:00:00 Mineirão True
5 1 294 373 4 17 v d 4.0 1.0 2017-05-15 20:00:00 Couto Pereira True
6 1 284 263 5 16 v d 2.0 0.0 2017-05-14 19:00:00 Arena do Grêmio True
7 1 265 293 1 18 v d 6.0 2.0 2017-05-14 16:00:00 Fonte Nova True
8 1 303 292 3 20 v d 4.0 0.0 2017-05-14 16:00:00 Moisés Lucarelli True
9 1 314 287 13 12 e e 0.0 0.0 2017-05-14 16:00:00 Ressacada True
10 2 263 303 8 15 dv vd 2.0 0.0 2017-05-21 18:00:00 Engenhão True
11 2 267 265 9 12 dv vd 2.0 1.0 2017-05-21 11:00:00 São Januário True
12 2 277 294 7 14 dv vd 1.0 0.0 2017-05-20 16:00:00 Vila Belmiro True
13 2 276 314 5 18 dv ed 2.0 0.0 2017-05-22 20:00:00 Morumbi True
14 2 282 266 16 3 ed vv 1.0 2.0 2017-05-21 16:00:00 Independência True
15 2 293 284 19 1 dd vv 0.0 2.0 2017-05-21 16:00:00 Arena da Baixada True
16 2 292 283 11 10 de ve 1.0 1.0 2017-05-21 19:00:00 Ilha do Retiro True
17 2 287 264 17 4 ed ev 0.0 1.0 2017-05-21 16:00:00 Fonte Nova True
18 2 373 262 20 2 dd ev 0.0 3.0 2017-05-20 19:00:00 Serra Dourada True
19 2 315 275 6 13 ev vd 1.0 0.0 2017-05-20 19:00:00 Arena Condá True
20 3 263 265 6 14 dvv vdd 1.0 0.0 2017-05-28 19:00:00 Engenhão True
21 3 267 266 7 15 dvv vvd 3.0 2.0 2017-05-27 16:00:00 São Januário True
22 3 277 283 17 5 dvd vev 0.0 1.0 2017-05-28 16:00:00 Vila Belmiro True
23 3 276 275 2 16 dvv vdd 2.0 0.0 2017-05-27 19:00:00 Morumbi True
24 3 282 303 11 10 ede vde 2.0 2.0 2017-05-28 11:00:00 Independência True
25 3 293 262 12 9 dde eve 1.0 1.0 2017-05-28 16:00:00 Arena da Baixada True
26 3 292 284 8 13 dev vvd 4.0 3.0 2017-05-28 18:00:00 Ilha do Retiro True
27 3 287 294 18 1 edd vdv 0.0 1.0 2017-05-27 21:00:00 Fonte Nova True
28 3 373 264 20 4 ddd evv 0.0 1.0 2017-05-28 16:00:00 Serra Dourada True
29 3 315 314 3 19 evv edd 2.0 0.0 2017-05-29 20:00:00 Arena Condá True
... ... ... ... ... ... ... ... ... ... ... ... ...
140 15 266 283 12 10 eedve dvvee 1.0 1.0 2017-07-20 19:30:00 Giulite Coutinho True
141 15 262 275 8 9 vvdee vddve 2.0 2.0 2017-07-19 21:45:00 Luso-Brasileiro True
142 15 277 315 3 18 evvev eedvd 1.0 0.0 2017-07-19 19:30:00 Vila Belmiro True
143 15 276 267 5 17 ddedv edved 1.0 0.0 2017-07-19 21:45:00 Morumbi True
144 15 282 265 15 4 vedvd eevev 0.0 2.0 2017-07-19 21:45:00 Independência True
145 15 293 263 13 11 dedee devve 0.0 0.0 2017-07-20 21:00:00 Arena da Baixada True
146 15 292 373 2 20 vvvdv ededd 4.0 0.0 2017-07-20 20:00:00 Ilha do Retiro True
147 15 287 284 19 1 evddd ddvvv 1.0 3.0 2017-07-19 19:30:00 Barradão True
148 15 303 294 6 16 edddv edvdd 4.0 0.0 2017-07-19 21:00:00 Moisés Lucarelli True
149 15 314 264 14 7 evdee vvvee 0.0 0.0 2017-07-19 21:00:00 Ressacada True
150 16 266 264 12 1 edved vveev 0.0 1.0 2017-07-23 16:00:00 Maracanã True
151 16 262 294 4 15 vdeev dvddd 2.0 1.0 2017-07-22 19:00:00 Luso-Brasileiro True
152 16 277 265 3 14 vvevv evevd 3.0 0.0 2017-07-23 11:00:00 Pacaembu True
153 16 276 284 18 2 dedve dvvve 1.0 1.0 2017-07-24 20:00:00 Morumbi True
154 16 282 267 13 8 edvdd dvedv 1.0 2.0 2017-07-23 19:00:00 Independência True
155 16 293 303 16 10 edeed dddvv 0.0 2.0 2017-07-23 19:00:00 Arena da Baixada True
156 16 292 275 6 5 vvdvd ddvev 0.0 2.0 2017-07-23 16:00:00 Arena de Pernambuco True
157 16 287 315 19 11 vdddd edvdv 1.0 2.0 2017-07-22 16:00:00 Barradão True
158 16 373 263 20 7 dedde evvee 1.0 1.0 2017-07-23 19:00:00 Olímpico (GO) True
159 16 314 283 17 9 vdeev vveed 1.0 0.0 2017-07-23 16:00:00 Ressacada True
160 17 263 276 7 16 vveed edvev 3.0 4.0 2017-07-29 16:00:00 Engenhão True
161 17 267 293 8 14 vedvd deedv 0.0 1.0 2017-07-31 20:00:00 Raulino de Oliveira True
162 17 275 314 4 18 dvevv deevd 2.0 0.0 2017-07-29 19:00:00 Arena Palmeiras True
163 17 264 262 1 5 veeve deeve 1.0 1.0 2017-07-30 16:00:00 Arena Corinthians True
164 17 283 287 9 19 veede dddde 0.0 0.0 2017-07-30 19:00:00 Mineirão True
165 17 294 282 17 10 vdddd dvddv 0.0 2.0 2017-07-30 16:00:00 Couto Pereira True
166 17 284 277 2 3 vvvee vevve 1.0 1.0 2017-07-30 19:00:00 Arena do Grêmio True
167 17 265 292 15 6 vevdd vdvdv 1.0 3.0 2017-07-30 16:00:00 Fonte Nova True
168 17 303 266 11 13 dddvv edved NaN NaN 2017-08-09 00:00:00 Moisés Lucarelli False
169 17 315 373 12 20 dvdvd eddev 1.0 2.0 2017-07-30 11:00:00 Arena Condá True

170 rows × 12 columns


In [5]:
def get_pontos(row):
    home = row["placar_oficial_mandante"]
    away = row["placar_oficial_visitante"]
    if home > away:
        return 3, 0, 'v', 'd'
    elif home < away:
        return 0, 3, 'd', 'v'
    else:
        return 1, 1, 'e', 'e'

In [6]:
partidas[["pontos_mandante",
          "pontos_visitante",
          "resultado_mandante",
          "resultado_visitante"]] = partidas.apply(get_pontos, axis=1).apply(pd.Series)

In [7]:
tabela_mandante = partidas[["rodada_id",
                            "clube_casa_id",
                            "pontos_mandante",
                            "resultado_mandante",
                            "placar_oficial_mandante",
                            "placar_oficial_visitante"]]

In [8]:
tabela_visitante = partidas[["rodada_id",
                             "clube_visitante_id",
                             "pontos_visitante",
                             "resultado_visitante",
                             "placar_oficial_visitante",
                             "placar_oficial_mandante"]]

In [9]:
tabela_columns = ["rodada_id", "clube_id", "pontos", "resultado", "gols_pro", "gols_contra"]

In [10]:
tabela_mandante.columns = tabela_columns

In [11]:
tabela_visitante.columns = tabela_columns

In [12]:
tabela = pd.concat([tabela_mandante, tabela_visitante])

In [13]:
tabela = tabela.sort_values(["rodada_id", "clube_id"]).reset_index(drop=True)

In [14]:
tabela[["pontos_cumsum",
        "gols_pro_cumsum",
        "gols_contra_cumsum"]] = tabela.groupby("clube_id")[["pontos",
                                                             "gols_pro",
                                                             "gols_contra"]].cumsum()

In [15]:
tabela["aproveitamento"] = tabela.groupby("clube_id")["resultado"].apply(pd.Series.cumsum).str.slice(-5)

In [16]:
tabela["saldo_gols"] = tabela["gols_pro_cumsum"] - tabela["gols_contra_cumsum"]

In [17]:
tabela = tabela.sort_values(
    ["rodada_id", "pontos_cumsum", "saldo_gols", "gols_pro_cumsum"],
    ascending=[True, False, False, False]).reset_index(drop=True)

In [18]:
tabela["aux_posicao"] = 1

In [19]:
tabela["posicao"] = tabela.groupby("rodada_id")["aux_posicao"].cumsum()

In [20]:
partidas = pd.merge(partidas,
                    tabela,
                    left_on=["rodada_id", "clube_casa_id"],
                    right_on=["rodada_id", "clube_id"])

In [21]:
partidas = partidas.drop([
        "clube_casa_posicao",
        "clube_visitante_posicao",
        "aproveitamento_mandante",
        "aproveitamento_visitante",
        "pontos_mandante",
        "pontos_visitante",
        "resultado_mandante",
        "resultado_visitante",
        "clube_id",
        "pontos",
        "resultado",
        "gols_pro",
        "gols_contra",
        "pontos_cumsum",
        "gols_pro_cumsum",
        "gols_contra_cumsum",
        "saldo_gols",
        "aux_posicao"], axis=1)

In [22]:
partidas.columns = ['rodada_id', 'clube_casa_id', 'clube_visitante_id',
       'placar_oficial_mandante', 'placar_oficial_visitante', 'partida_data',
       'local', 'valida', 'aproveitamento_mandante', 'clube_casa_posicao']

In [23]:
partidas = pd.merge(partidas,
                    tabela,
                    left_on=["rodada_id", "clube_visitante_id"],
                    right_on=["rodada_id", "clube_id"])

In [24]:
partidas = partidas.drop([
        "clube_id",
        "pontos",
        "resultado",
        "gols_pro",
        "gols_contra",
        "pontos_cumsum",
        "gols_pro_cumsum",
        "gols_contra_cumsum",
        "saldo_gols",
        "aux_posicao"], axis=1)

In [25]:
partidas.columns = ['rodada_id', 'clube_casa_id', 'clube_visitante_id',
       'placar_oficial_mandante', 'placar_oficial_visitante', 'partida_data',
       'local', 'valida', 'aproveitamento_mandante', 'clube_casa_posicao',
       'aproveitamento_visitante', 'clube_visitante_posicao']

In [26]:
partidas = partidas[[
        'rodada_id', 'clube_casa_id', 'clube_visitante_id',
        'clube_casa_posicao', 'clube_visitante_posicao',
        'aproveitamento_mandante', 'aproveitamento_visitante',
        'placar_oficial_mandante', 'placar_oficial_visitante',
        'partida_data', 'local', 'valida']]

In [27]:
partidas


Out[27]:
rodada_id clube_casa_id clube_visitante_id clube_casa_posicao clube_visitante_posicao aproveitamento_mandante aproveitamento_visitante placar_oficial_mandante placar_oficial_visitante partida_data local valida
0 1 266 277 6 14 v d 3.0 2.0 2017-05-14 11:00:00 Maracanã True
1 1 262 282 8 10 e e 1.0 1.0 2017-05-13 16:00:00 Maracanã True
2 1 275 267 2 19 v d 4.0 0.0 2017-05-14 16:00:00 Arena Palmeiras True
3 1 264 315 9 11 e e 1.0 1.0 2017-05-13 19:00:00 Arena Corinthians True
4 1 283 276 7 15 v d 1.0 0.0 2017-05-14 16:00:00 Mineirão True
5 1 294 373 4 17 v d 4.0 1.0 2017-05-15 20:00:00 Couto Pereira True
6 1 284 263 5 16 v d 2.0 0.0 2017-05-14 19:00:00 Arena do Grêmio True
7 1 265 293 1 18 v d 6.0 2.0 2017-05-14 16:00:00 Fonte Nova True
8 1 303 292 3 20 v d 4.0 0.0 2017-05-14 16:00:00 Moisés Lucarelli True
9 1 314 287 13 12 e e 0.0 0.0 2017-05-14 16:00:00 Ressacada True
10 2 263 303 13 10 dv vd 2.0 0.0 2017-05-21 18:00:00 Engenhão True
11 2 267 265 14 7 dv vd 2.0 1.0 2017-05-21 11:00:00 São Januário True
12 2 277 294 12 9 dv vd 1.0 0.0 2017-05-20 16:00:00 Vila Belmiro True
13 2 276 314 11 17 dv ed 2.0 0.0 2017-05-22 20:00:00 Morumbi True
14 2 282 266 15 2 ed vv 1.0 2.0 2017-05-21 16:00:00 Independência True
15 2 293 284 19 1 dd vv 0.0 2.0 2017-05-21 16:00:00 Arena da Baixada True
16 2 292 283 18 5 de ve 1.0 1.0 2017-05-21 19:00:00 Ilha do Retiro True
17 2 287 264 16 4 ed ev 0.0 1.0 2017-05-21 16:00:00 Fonte Nova True
18 2 373 262 20 3 dd ev 0.0 3.0 2017-05-20 19:00:00 Serra Dourada True
19 2 315 275 6 8 ev vd 1.0 0.0 2017-05-20 19:00:00 Arena Condá True
20 3 263 265 8 13 dvv vdd 1.0 0.0 2017-05-28 19:00:00 Engenhão True
21 3 267 266 9 7 dvv vvd 3.0 2.0 2017-05-27 16:00:00 São Januário True
22 3 277 283 15 3 dvd vev 0.0 1.0 2017-05-28 16:00:00 Vila Belmiro True
23 3 276 275 6 14 dvv vdd 2.0 0.0 2017-05-27 19:00:00 Morumbi True
24 3 282 303 16 11 ede vde 2.0 2.0 2017-05-28 11:00:00 Independência True
25 3 293 262 19 10 dde eve 1.0 1.0 2017-05-28 16:00:00 Arena da Baixada True
26 3 292 284 12 4 dev vvd 4.0 3.0 2017-05-28 18:00:00 Ilha do Retiro True
27 3 287 294 17 5 edd vdv 0.0 1.0 2017-05-27 21:00:00 Fonte Nova True
28 3 373 264 20 2 ddd evv 0.0 1.0 2017-05-28 16:00:00 Serra Dourada True
29 3 315 314 1 18 evv edd 2.0 0.0 2017-05-29 20:00:00 Arena Condá True
... ... ... ... ... ... ... ... ... ... ... ... ...
140 15 266 283 9 8 eedve dvvee 1.0 1.0 2017-07-20 19:30:00 Giulite Coutinho True
141 15 262 275 4 6 vvdee vddve 2.0 2.0 2017-07-19 21:45:00 Luso-Brasileiro True
142 15 277 315 3 15 evvev eedvd 1.0 0.0 2017-07-19 19:30:00 Vila Belmiro True
143 15 276 267 17 11 ddedv edved 1.0 0.0 2017-07-19 21:45:00 Morumbi True
144 15 282 265 10 12 vedvd eevev 0.0 2.0 2017-07-19 21:45:00 Independência True
145 15 293 263 16 7 dedee devve 0.0 0.0 2017-07-20 21:00:00 Arena da Baixada True
146 15 292 373 5 20 vvvdv ededd 4.0 0.0 2017-07-20 20:00:00 Ilha do Retiro True
147 15 287 284 19 2 evddd ddvvv 1.0 3.0 2017-07-19 19:30:00 Barradão True
148 15 303 294 14 13 edddv edvdd 4.0 0.0 2017-07-19 21:00:00 Moisés Lucarelli True
149 15 314 264 18 1 evdee vvvee 0.0 0.0 2017-07-19 21:00:00 Ressacada True
150 16 266 264 10 1 edved vveev 0.0 1.0 2017-07-23 16:00:00 Maracanã True
151 16 262 294 4 15 vdeev dvddd 2.0 1.0 2017-07-22 19:00:00 Luso-Brasileiro True
152 16 277 265 3 14 vvevv evevd 3.0 0.0 2017-07-23 11:00:00 Pacaembu True
153 16 276 284 18 2 dedve dvvve 1.0 1.0 2017-07-24 20:00:00 Morumbi True
154 16 282 267 13 8 edvdd dvedv 1.0 2.0 2017-07-23 19:00:00 Independência True
155 16 293 303 16 11 edeed dddvv 0.0 2.0 2017-07-23 19:00:00 Arena da Baixada True
156 16 292 275 6 5 vvdvd ddvev 0.0 2.0 2017-07-23 16:00:00 Arena de Pernambuco True
157 16 287 315 19 12 vdddd edvdv 1.0 2.0 2017-07-22 16:00:00 Barradão True
158 16 373 263 20 7 dedde evvee 1.0 1.0 2017-07-23 19:00:00 Olímpico (GO) True
159 16 314 283 17 9 vdeev vveed 1.0 0.0 2017-07-23 16:00:00 Ressacada True
160 17 263 276 7 16 vveed edvev 3.0 4.0 2017-07-29 16:00:00 Engenhão True
161 17 267 293 10 14 vedvd deedv 0.0 1.0 2017-07-31 20:00:00 Raulino de Oliveira True
162 17 275 314 5 18 dvevv deevd 2.0 0.0 2017-07-29 19:00:00 Arena Palmeiras True
163 17 264 262 1 4 veeve deeve 1.0 1.0 2017-07-30 16:00:00 Arena Corinthians True
164 17 283 287 8 19 veede dddde 0.0 0.0 2017-07-30 19:00:00 Mineirão True
165 17 294 282 17 9 vdddd dvddv 0.0 2.0 2017-07-30 16:00:00 Couto Pereira True
166 17 284 277 2 3 vvvee vevve 1.0 1.0 2017-07-30 19:00:00 Arena do Grêmio True
167 17 265 292 15 6 vevdd vdvdv 1.0 3.0 2017-07-30 16:00:00 Fonte Nova True
168 17 303 266 12 11 ddvve dvede NaN NaN 2017-08-09 00:00:00 Moisés Lucarelli False
169 17 315 373 13 20 dvdvd eddev 1.0 2.0 2017-07-30 11:00:00 Arena Condá True

170 rows × 12 columns


In [28]:
partidas.to_csv("../2017/new_partidas.csv", index=False, quoting=csv.QUOTE_NONNUMERIC, encoding="utf-8")

In [ ]: