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é.