Можно ли ссылаться на другой фрейм данных при использовании выражений Polars без использования лямбды?Python

Программы на Python
Ответить
Anonymous
 Можно ли ссылаться на другой фрейм данных при использовании выражений Polars без использования лямбды?

Сообщение Anonymous »

Есть ли способ ссылаться на другой фрейм данных Polars в выражениях Polars без использования лямбда-выражений?
В качестве простого примера — предположим, что у меня есть два фрейма данных:

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

import polars as pl

df_1 = pl.DataFrame(
{
"time": pl.date_range(
pl.date(2021, 1, 1),
pl.date(2022, 1, 1),
interval="1d",
eager=True
),
"x": pl.int_range(0, 366, eager=True),
}
)

df_2 = pl.DataFrame(
{
"time": pl.date_range(
pl.date(2021, 1, 1),
pl.date(2021, 2, 1),
interval="1mo",
eager=True
),
"y": [50, 100],
}
)
Для каждого значения y в df_2 я хотел бы найти максимальную дату в df_1, при условии, что значение x меньше, чем y.
Я могу выполнить это с помощью map_elements/lambda (см. ниже), но мне просто интересно, есть ли более идиоматический способ выполнения эту операцию?

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

df_2.group_by("y").agg(
pl.col("y").map_elements(lambda s: df_1.filter(pl.col("x") < s).select(pl.col("time")).max().item()).alias('latest')
)

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

shape: (2, 2)
┌─────┬────────────┐
│ y   ┆ latest     │
│ --- ┆ ---        │
│ i64 ┆ date       │
╞═════╪════════════╡
│ 50  ┆ 2021-02-19 │
│ 100 ┆ 2021-04-10 │
└─────┴────────────┘
Изменить:
Можно ли предварительно фильтровать df_1 перед использованием join_asof. Поэтому переключив вопрос на поиск минимального значения вместо максимального, в отдельном случае я бы сделал следующее:

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

(
df_2
.filter(pl.col('y') == 50)
.join_asof(
df_1
.sort("x")
.filter(pl.col('time') > date(2021,11,1))
.select(
pl.col("time").cum_min().alias("time_min"),
pl.col("x").alias("original_x"),
(pl.col("x") + 1).alias("x"),
),
left_on="y",
right_on="x",
strategy="forward",
)
)
Есть ли способ обобщить это слияние без использования функции цикла/map_elements?


Подробнее здесь: https://stackoverflow.com/questions/732 ... sions-with
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

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