Кадр данных Polars join_asof с (сохранением) нуля ⇐ Python

Программы на Python
Anonymous
Кадр данных Polars join_asof с (сохранением) нуля

Сообщение Anonymous »

Обновление: Эта проблема решена. df.join_asof(df2, on="time", by=["a", "b"]) теперь выполняется без ошибок и возвращает ожидаемый результат.

В настоящее время, согласно моим экспериментам, join_asof не вызывает ошибку, если в любом из столбцов «по» есть значение None (null). Есть ли способ использовать join_asof, сохраняя при этом значение None (null) в левом фрейме данных?
Например, у меня есть следующие фреймы данных:

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

df = pl.DataFrame(
{"a": [1, 2, 3, 4, 5, None, 8], "b": [2, 3, 4, 5, 6, 7, None], "time": [1, 2, 3, 4, 5, 6, 7]}
)
df2 = pl.DataFrame({"a": [1, 3, 4, None], "b": [2, 4, 5, 8], "c": [2, 3, 4, 5], "time": [0, 2, 4, 6]})
Если я просто запущу приведенный ниже код, возникнет ошибка:

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

df.join_asof(df2, on="time", by=["a", "b"])

thread '' panicked at 'called `Result::unwrap()` on an `Err` value: ComputeError(Borrowed("cannot take slice"))', /home/runner/work/polars/polars/polars/polars-core/src/frame/asof_join/groups.rs:253:35
Но следующий код работает хорошо:

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

df.drop_nulls(["a", "b"]).join_asof(df2.drop_nulls(["a", "b"]), on="time", by=["a", "b"])

shape: (5, 4)
┌─────┬─────┬──────┬──────┐
│ a   ┆ b   ┆ time ┆ c    │
│ --- ┆ --- ┆ ---  ┆ ---  │
│ i64 ┆ i64 ┆ i64  ┆ i64  │
╞═════╪═════╪══════╪══════╡
│ 1   ┆ 2   ┆ 1    ┆ 2    │
│ 2   ┆ 3   ┆ 2    ┆ null │
│ 3   ┆ 4   ┆ 3    ┆ 3    │
│ 4   ┆ 5   ┆ 4    ┆ 4    │
│ 5   ┆ 6   ┆ 5    ┆ null │
└─────┴─────┴──────┴──────┘
Мой вопрос: как получить следующий результат, в основном результат выше с добавленными строками (где a имеет значение null в левом кадре данных - в данном случае df)?

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

┌─────┬─────┬──────┬──────┐
│ a   ┆ b   ┆ time ┆ c    │
│ --- ┆ --- ┆ ---  ┆ ---  │
│ i64 ┆ i64 ┆ i64  ┆ i64  │
╞═════╪═════╪══════╪══════╡
│ 1   ┆ 2   ┆ 1    ┆ 2    │
│ 2   ┆ 3   ┆ 2    ┆ null │
│ 3   ┆ 4   ┆ 3    ┆ 3    │
│ 4   ┆ 5   ┆ 4    ┆ 4    │
│ 5   ┆ 6   ┆ 5    ┆ null │
│ null┆ 7   ┆ 6    ┆ null │
│ 8   ┆ null┆ 7    ┆ null │
└─────┴─────┴──────┴──────┘
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/753 ... hkeep-null

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