# Before: three .apply() calls, three passes through 1 million rows df['gross_revenue'] = df.apply(lambda row: row['sales'] * row['quantity'], axis=1) df['tax'] = df.apply(lambda row: row['gross_revenue'] * 0.075, axis=1) df['net_revenue'] = df.apply(lambda row: row['gross_revenue'] - row['tax'], axis=1) # After: one vectorized expression, no temporary columns df['net_revenue'] = df['sales'] * df['quantity'] * (1 - 0.075)