← retour aux snippets

pandas: apply vs vectorisé (benchmark)

Comparer apply ligne par ligne vs opérations vectorisées.

objectif

Comparer apply ligne par ligne vs opérations vectorisées.

code minimal

import pandas as pd
import numpy as np

df = pd.DataFrame({"x":np.arange(1000)})
vec = (df["x"]*2 + 1).sum()
app = df.apply(lambda r: r["x"]*2 + 1, axis=1).sum()
print(vec == app)

utilisation

import pandas as pd
import numpy as np, time

df = pd.DataFrame({"x":np.arange(10000)})
t0=time.time(); _=(df["x"]*3).sum(); t1=time.time()
t2=time.time(); _=df.apply(lambda r: r["x"]*3, axis=1).sum(); t3=time.time()
print((t1-t0) <= (t3-t2))

variante(s) utile(s)

import pandas as pd
import numpy as np

df = pd.DataFrame({"x":np.arange(10)})
print(df.assign(y=lambda d: d["x"]*2)["y"].iloc[-1])

notes

  • Favoriser vectorisation pour performance et lisibilité.