Polars.when(cond).then().otherwise() оценивает .then(), когда cond имеет значение falsePython

Программы на Python
Anonymous
Polars.when(cond).then().otherwise() оценивает .then(), когда cond имеет значение false

Сообщение Anonymous »

Скажем, у меня есть это:

Код: Выделить всё

u = 2

df = (polars.DataFrame(dict(
j=numpy.random.randint(10, 99, 10)
))
.with_row_count()
.with_columns(k=(polars.col('j') % 10) == u)
.with_columns(l=polars.col('k').any())
)
print(df)

print(df
.with_columns(i=polars
.when(polars.col('k').any())
.then(polars.col('row_nr') > polars.col('row_nr').where(polars.col('k')).first())
.otherwise(None)
)
)
Это дает следующее:

Код: Выделить всё

 row_nr (u32)  j (i64)  k (bool)  l (bool)
0             47       false     true
1             22       true      true
2             82       true      true
3             19       false     true
4             85       false     true
5             15       false     true
6             89       false     true
7             74       false     true
8             26       false     true
9             11       false     true
shape: (10, 4)
row_nr (u32)  j (i64)  k (bool)  l (bool)  i (bool)
0             47       false     true      false
1             22       true      true      false
2             82       true      true      true
3             19       false     true      true
4             85       false     true      true
5             15       false     true      true
6             89       false     true      true
7             74       false     true      true
8             26       false     true      true
9             11       false     true      true
shape: (10, 5)
Однако, если ни одно условие не соответствует, например в приведенном выше примере с u = 0:

Код: Выделить всё

 row_nr (u32)  j (i64)  k (bool)  l (bool)
0             47       false     false
1             22       false     false
2             82       false     false
3             19       false     false
4             85       false     false
5             15       false     false
6             89       false     false
7             74       false     false
8             26       false     false
9             11       false     false
shape: (10, 4)
Я получаю это исключение:

Код: Выделить всё

exceptions.ComputeError: cannot evaluate two series of different lengths (10 and 0)

Error originated in expression: '[(col("row_nr")) > (col("row_nr").filter(col("k")).first())]'
Я знаю, что могу проверить это заранее, а затем сделать что-то еще, но мне было интересно:
  • Почему в этом случае не работает Polars.when().then().otherwise(), учитывая, что .then() не даже вычисляется в этом случае (поскольку .when(polars.col('k').any()) имеет значение false)?
  • Есть ли способ сделать это в рамках одного выражения (не выходя «за пределы» выражения, т.е. обращаясь к чистому Python if/, используя канал и тому подобное)?


Подробнее здесь: https://stackoverflow.com/questions/768 ... d-is-false

Вернуться в «Python»