Как мне написать запрос типа (A или B) и C в Polars?Python

Программы на Python
Anonymous
 Как мне написать запрос типа (A или B) и C в Polars?

Сообщение Anonymous »

Я ожидал, что либо a, либо b будет равно 0,0 (не NaN), а c всегда будет равно 0,0. В документации Polars указано, что используется | как «или» и & как «и». Я считаю, что логика верна:
(((a не Нэн) или (b не Нэн)) и (c не Нэн))
Однако вывод неверен.
import polars as pl
import numpy as np

df = pl.DataFrame(
data={
"a": [0.0, 0.0, 0.0, 0.0, np.nan, np.nan, np.nan],
"b": [0.0, 0.0, np.nan, np.nan, 0.0, 0.0, np.nan],
"c": [0.0, np.nan, 0.0, np.nan, 0.0, np.nan, np.nan]
}
)

df.with_columns(
((pl.col('a').is_not_nan() | pl.col('b').is_not_nan())
& pl.col('c').is_not_nan()).alias('Keep'))
df_actual = df.filter(pl.col("Keep") is True)

print("df\n", df)
print("df_expect\n", df_expect)
print("df_actual\n", df_actual)

df
shape: (7, 3)
┌─────┬─────┬─────┐
│ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 │
╞═════╪═════╪═════╡
│ 0.0 ┆ 0.0 ┆ 0.0 │
│ 0.0 ┆ 0.0 ┆ NaN │
│ 0.0 ┆ NaN ┆ 0.0 │
│ 0.0 ┆ NaN ┆ NaN │
│ NaN ┆ 0.0 ┆ 0.0 │
│ NaN ┆ 0.0 ┆ NaN │
│ NaN ┆ NaN ┆ NaN │
└─────┴─────┴─────┘

df_expect
shape: (3, 3)
┌─────┬─────┬─────┐
│ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 │
╞═════╪═════╪═════╡
│ 0.0 ┆ NaN ┆ 0.0 │
│ NaN ┆ 0.0 ┆ 0.0 │
│ 0.0 ┆ 0.0 ┆ 0.0 │
└─────┴─────┴─────┘

df_actual
shape: (0, 3)
┌─────┬─────┬─────┐
│ a ┆ b ┆ c │
│ --- ┆ --- ┆ --- │
│ f64 ┆ f64 ┆ f64 │
╞═════╪═════╪═════╡
└─────┴─────┴─────┘


Подробнее здесь: https://stackoverflow.com/questions/794 ... -in-polars

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