Например, для фрейма данных:
Код: Выделить всё
df = pl.DataFrame({
'A': [randint(1, 10**15) for _ in range(30_000_000)],
'B': [randint(1, 10**15) for _ in range(30_000_000)],
}, schema={
'A': pl.UInt64,
'B': pl.UInt64,
})
Код: Выделить всё
df.with_columns(
pl.min_horizontal(['A', 'B']).alias('min_column')
)
92.4 ms ± 16.3 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Код: Выделить всё
df.with_columns(
pl.when(
pl.col('A') < pl.col('B')
).then(pl.col('A')).otherwise(pl.col('B')).alias('min_column'),
)
458 ms ± 75.9 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Код: Выделить всё
df.with_columns((pl.col('A') < pl.col('B')).alias('column_comparison'))
49.2 ms ± 6.23 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
Код: Выделить всё
df.with_columns(
pl.when(
pl.col('A') < pl.col('B')
).then(pl.col('A')).alias('min_column')
)
664 ms ± 19.7 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
Итак, вопросы здесь:
- Это ожидаемое поведение?
- Почему pl.when().then() много медленнее, чем другие выражения?
- В каких случаях следует избегать When().then().otherwise()?
Подробнее здесь: https://stackoverflow.com/questions/768 ... se-is-slow